本文由 FrameSprite 作者工作流整理,AI 辅助编写,引用原始技术资料;构造案例不代表模型或引擎实测。
在动作恢复窗口保存一次输入,声明过期、消费和取消规则,避免动作完成后自动连续攻击。
输入缓冲保存近期的一次操作意图,在角色重新允许动作时消费一次。记录按下时间、动作类型和过期时间,执行后立即清除;过期或角色死亡时丢弃。动画帧展示只通知当前阶段,是否可以攻击仍由控制器决定。缓冲窗口应使用声明好的游戏时钟,不能因改了序列帧数量而随意变化。
选择 attack 或 jump 等允许缓冲的动作,规定窗口长度和是否只保留最新一次。连招分支是另一个规则,不能把缓冲的每个输入都无条件追加进队列。
用单调递增的游戏时间记录 pressedAt 和 expiresAt。若暂停会冻结操作窗口,就使用游戏时钟;若希望暂停中输入失效则明确另行处理。不要混用系统时间和归一化动画进度。
角色从恢复进入可执行状态时检查期限、当前状态和资源条件。先清缓冲再启动动作,防止启动回调又读到同一条输入。动作不存在时采用安全失败,不用第一个图集区域代替。
测试有效、恰好过期、超过期限、死亡、切角色和动作被取消。记录输入序号、消费时间和消费次数。帧灵素材可替换,但控制器的响应契约不应因此改变。
按下时间为 940ms,窗口 120ms,恢复在 1000ms 结束;另测恢复到 1070ms。
1000ms 时有效且只执行一次;1070ms 时超过 1060ms 期限,应丢弃。
窗口长度是示例,不是所有动作游戏的推荐值。
情况 | 处理 | 结果 |
|---|---|---|
eligible before expiry | clear then execute | one consumption |
expired | discard | no action |
dead or replaced | invalidate | no stale input |
玩家在 880 毫秒按攻击,缓冲有效期 180 毫秒,则到期时刻为 1060 毫秒。如果动作在 1000 毫秒解除锁定,可以消费一次;如果 1070 毫秒才允许攻击,就应丢弃旧输入。不要每帧刷新同一个输入的到期时间,否则缓冲会变成无限排队。死亡、切换场景和打开菜单也应明确是否清空。记录按下、解锁和消费三个时刻,比把动画播快更能解释“按键没反应”的根因;缓冲长度需要实际手感测试,示例数值不是通用标准。
缓冲让早按的输入保留,取消让当前动作提前结束,两者不能相互替代。先固定恢复与取消阶段,再调窗口;否则玩家觉得操作更快,可能只是攻击被提前打断。把输入、状态和显示帧分别记录,设计才能知道改动改变了哪一层。
本次补充由 AI 辅助整理,按公开原始技术资料核对。可下载的输入与预期结果是原创构造案例,不代表模型或引擎实测;实际项目应按步骤保留自己的验收记录。
不是,按住重发是输入策略,缓冲是保存一次已有意图。
通常不应,旧意图会在意外时机执行,需明确期限。
不必,窗口应按游戏规则计时,再检查画面与阶段是否匹配。
AnimatedSprite2D · Godot Engine
Node · Godot Engine
原文:https://cn.framesprite.com/guides/sprite-action-input-buffer-expiry
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。