本文由 FrameSprite 作者工作流整理,AI 辅助编写,引用原始技术资料;构造案例不代表模型或引擎实测。
用前后时间区间结算事件,不依赖当前显示帧恰好等于某一编号。
当动画更新从第 2 帧直接到第 4 帧,判断 currentFrame===3 会漏掉第 3 帧事件。记录前后动作时间,处理区间 (previous,current] 中的标记;循环、回退与取消分别声明规则。音效和伤害不要由可见画面是否显示过来决定。
为事件记录动作语义和时刻,避免把它只藏在图片编号条件里。将“显示第几张图”与“本次更新经过哪些事件”作为两个不同输出。
采用左开右闭区间,位于 current 的事件在本轮执行,下轮不会再执行。初始时刻 0 的事件需要显式进入策略,不能依赖普通跨越规则自动补上。
循环时按经过的轮次拆分区间,并限制大跨度追赶;游戏性结算不应无上限补发。跳过剧情或取消攻击是语义操作,可选择不触发中间事件。
测试正好命中时刻、越过两标记、同一时间重复更新与重新播放。用帧灵图作显示素材,但把攻击实例去重交给游戏控制器。
前时刻 0.08,后时刻 0.27,标记位于 0.1、0.2、0.3。
触发 0.1 与 0.2;再次更新到 0.27 不触发任何标记。
这是非循环时间区间计算,循环和回退需独立实现。
变化 | 策略 |
|---|---|
正常前进 | 处理跨越标记 |
取消 | 按动作规则抑制 |
重新开始 | 新实例身份 |
从 0.08 秒更新到 0.23 秒,时间线上的 0.10 秒挥剑音效和 0.20 秒接触事件都被跨越了。只比较当前帧等于事件帧,会把它们一起漏掉。采用前一时刻小于事件、事件不大于当前时刻的区间判断,并记录本次动作已触发的事件。随后从 0.23 到 0.27 秒不能再次触发。循环跨圈、倒放和回滚要另立规则;音效可以按表现时间补发,伤害仍应由游戏逻辑决定,不能因为补播音效再造成一次伤害。
图片抽样、屏幕刷新与游戏逻辑的频率可以不同。事件日志应记录动作实例和标记身份,才能区分漏触发、重复触发和被取消。新增更多序列帧不会自动修复使用相等条件的控制器。
本次补充由 AI 辅助整理,按公开原始技术资料核对。可下载的输入与预期结果是原创构造案例,不代表模型或引擎实测;实际项目应按步骤保留自己的验收记录。
不能,更新仍可能跨过事件帧。
需明确追赶上限与事件语义。
应由动作时间与游戏规则结算。
requestAnimationFrame timing · MDN
Monotonic performance clock · MDN
原文:https://cn.framesprite.com/guides/sprite-event-crossing-not-current-frame-equality
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。