正如opiop65已经说过的,增量时间只是您上一帧开始和当前帧开始之间所花费的时间。
它是如何工作的?
增量时间可以是任何类型的单位:纳秒、毫秒(<- 通常这是标准)或秒。正如您所说,当游戏以 60FPS 运行时,增量时间为 16,而当游戏以 30FPS 运行时,增量时间为 32。至于原因,很简单:为了让游戏以每秒 60 帧的速度运行,它必须每 1000/60 (= 16.666667) 毫秒产生一帧,但如果它以 30 帧运行,则它必须产生一帧每 1000/30 (= 33.333333) 毫秒。
但是为什么我们使用增量时间呢?
我们使用增量时间是因为我们想做运动和各种时间相关的事情,而不是帧相关。假设您希望游戏中的一个角色每秒水平移动 1 个单位。你是怎样做的?显然,您不能只在角色位置的 X 值上加 1,因为它1*x
每秒移动的次数x
等于您的 FPS(假设您每帧都会更新角色)。这意味着如果有人以 1 FPS 运行游戏,他的角色每秒移动 1 个单位,而如果有人以 5000 FPS 运行游戏,他的角色每秒移动 5000 个单位。当然这是不能接受的。
有人可以说他会1/16.6667
在每次更新时移动角色单位,但如果有人有 1 FPS,他会1/16.6667
每秒移动单位,而不是那个以 5000 FPS 运行的人,因此5000*(1/16.6667)
每秒移动单位。
是的,您可以启用垂直同步,但如果有人有 120Hz(或更高)而不是 60Hz 的显示器怎么办?是的,您可以锁定帧速率,但您的玩家不会对此感到太高兴。当游戏低于 60FPS 时,这也不会阻止角色减速。所以现在怎么办?
三角洲时间来救援!
您所要做的就是1*delta
在每次更新时移动您的角色。
如果游戏以高 FPS 运行,则 Delta 时间很短,如果游戏以低 FPS 运行,则增量时间很长,因此使那些以更高 FPS 运行游戏的角色变得更慢(因此他会移动更少量但更频繁)和那些角色以较低的 FPS 运行游戏的速度更快(因此他会更频繁地移动较大的数量),最终他们将在同一时间内移动相等的距离。
请注意,与增量时间相乘时使用的单位很重要:
如果您使用毫秒,那么在 60FPS 时,您的增量将以=每帧移动16.6667
结束。但是,如果您以秒为单位测量增量时间,那么在 60FPS 时,您的增量时间将意味着您的角色每帧都会移动单位。
这不是您应该担心的事情,请记住这一点。1*16.6667
16.6667
0.016667
0.016667