跳到主要内容
← 全部概念
操作手感 / 09

帧间隔

按每秒的速度移动,而非每帧的固定距离

交互演示

交互演示 · 移动指针或点击画面,观察变化

帧间隔是上一帧耗费的时间,以秒为单位。将各项速度乘以它,游戏在 30 fps 和 240 fps 下就能以相同的节奏运行。这里的帧率从 60 fps 降至 14 fps,每帧移动固定距离的赛车因此落后了。

适用场景

用实际经过的秒数计算移动、冷却和界面动画。以“单位/秒”表示的速度,只需乘一次经过的秒数,就能得到位移。

实现示例

不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。

dt = min(frameSeconds, 0.05)
position += velocity * dt
cooldown = max(0, cooldown - dt)
blend = 1 - exp(-smoothing * dt)

常见错误

不要重复乘两次帧间隔。限制长帧的时间上限会丢弃一部分实际经过的时间;对于必须完整计算这段时间的模拟,使用固定时间步累加器更合适。

延伸阅读

Gaffer On Games:修正你的时间步(Fix Your Timestep)↗
内容原作 Nicolas Zullo · 中文整理与交互改编