实现与帧率无关的加速
Posted
技术标签:
【中文标题】实现与帧率无关的加速【英文标题】:Implementing Framerate-independent Acceleration 【发布时间】:2019-08-08 11:36:04 【问题描述】:我正在尝试制作一个基于 html5 画布的游戏,其中涉及与帧速率无关的运动(对象以相同的速率移动,与 FPS 无关)。
我知道如何在以恒定速率移动的对象上实现与帧速率无关的运动。然而,在我的新游戏中,物体不会以恒定的速度移动 - 它们会加速。
我想让一个物体以每秒一个像素的速度加速,这样在每一秒结束的时候,物体都会在某个位置,不管FPS如何,如下图(从position = 0开始,速度 = 0:
Second 1: position: 1, velocity: 1
Second 2: position: 3, velocity: 2
Second 3: position: 6, velocity: 3
Second 4: position: 10, velocity: 4
...
除非我弄错了,这种情况可以用position += velocity += acceleration (1)
之类的公式重现。
如何实现与帧速率无关?
【问题讨论】:
您是否要求一个将位置作为时间函数的公式? 理想情况下,是的。它应该考虑每秒需要更新的次数 (FPS),以及每秒的加速度(在这种情况下,在任何方向上都是 1)。 【参考方案1】:如果加速度是常数a,在时间t=0,速度是V0,位置是X 0 然后在稍后的某个时间 t 速度和位置将是:
V = V0 + a tX = X0 + V0 t + a t2支持>/2
例如,如果我们取 a = 1 并从位置 = 0 开始,速度 = 0,我们以 1.0 的间隔对速度和位置进行采样:
Second 1: position: 0.5 velocity: 1
Second 2: position: 2 velocity: 2
Second 3: position: 4.5 velocity: 3
Second 4: position: 8 velocity: 4
但我们可以随时计算位置和速度。帧率没有出现在公式中。
【讨论】:
是否可以进行类似的操作,以使每一秒的位置而不是速度保持不变?例如,位置应分别为 1、3、6、10...。 @Nick362880: 是的,只要设置 X0=0, V0=0.5, a=1,你就会得到 x=1, 3, 6, 10, 15, 21,...以上是关于实现与帧率无关的加速的主要内容,如果未能解决你的问题,请参考以下文章