角色暂时不能执行动作时,短暂保存一次输入可以让操作衔接更自然。关键是分清什么时候记录、何时过期,以及恢复可行动时到底消耗哪一条输入。
这一篇用一组公开的自定义数据拆开计算过程。可以先遮住结果,依照约定逐项填写自己的记录,再用文末的复核办法检查。案例关注的是规则边界和状态变化,并不替任何具体作品规定玩法。
这里只保存最近一次输入,新输入覆盖旧输入。先清掉已经过期的记录,再接收本时刻输入,最后尝试执行;年龄等于期限仍有效,执行一次后清空。
先检查年龄是否超过上限,再记录新输入,最后在可行动时消耗唯一缓冲。
有效年龄上限1,采样时刻0至13 输入['跳', None, None, None, None, '闪', None, None, '跳', '闪', None, '闪', '跳', '闪'] 可行动标记[False, True, True, True, False, False, True, False, True, True, False, False, False, False]
时刻0,新输入跳,暂不能行动:未执行;剩余缓冲[0, '跳']。
时刻1,新输入无,可行动:执行跳;剩余缓冲空。
时刻2,新输入无,可行动:未执行;剩余缓冲空。
时刻3,新输入无,可行动:未执行;剩余缓冲空。
时刻4,新输入无,暂不能行动:未执行;剩余缓冲空。
时刻5,新输入闪,暂不能行动:未执行;剩余缓冲[5, '闪']。
时刻6,新输入无,可行动:执行闪;剩余缓冲空。
时刻7,新输入无,暂不能行动:未执行;剩余缓冲空。
时刻8,新输入跳,可行动:执行跳;剩余缓冲空。
时刻9,新输入闪,可行动:执行闪;剩余缓冲空。
时刻10,新输入无,暂不能行动:未执行;剩余缓冲空。
时刻11,新输入闪,暂不能行动:未执行;剩余缓冲[11, '闪']。
时刻12,新输入跳,暂不能行动:未执行;剩余缓冲[12, '跳']。
时刻13,新输入闪,暂不能行动:未执行;剩余缓冲[13, '闪']。
执行记录为[[1, '跳'], [6, '闪'], [8, '跳'], [9, '闪']]。
独立复核可从每次执行向前找最后一次输入,检查其后没有新输入覆盖、没有其他执行消耗,并且时间差没有超过期限。缓冲不是每帧自动重复动作。
可以对照同一输入序列分别缩短和延长期限,观察哪些原本被丢弃的输入变得可执行。期限过长也可能执行已经不再想要的动作,因此它是操作感的取舍,并非越长越好。
若实际观察与这个模型不同,先确认操作顺序、编号起点和边界是否包含,再检查是否漏记了前一步状态。每次只改变一个条件并保留原记录,通常比反复重做整段操作更容易找到差异。明确条件后,才适合把同一种方法应用到新的场景。