不同机器下,游戏编程如何保证物体移动具有相同的速度
在游戏编程里,为了实现物体平滑的移动,我们会在Tick里使用位移函数,使得物体在空间中得以移动,例如:UE4中的AddActorLocalOffset函数等,但是,这会有一个问题,每台机器的性能不同,造成了相同的代码在不同的机器上运行完一个Tick的时间也就不同,此时,不同机器间的FPS就会不同,那么造成的后果就是不同机器下,物体位移的速度就不同,如何解决这个问题呢?
其实这个问题可以用数学的方法进行解决,问题用形式化语言表达则是,在不同的δt(每一个Tick的运行时间)下,在相同的时间t内,要让不同机器下的物体位移X相同,即位移的平均速度v相同。可以列出(1)式,其中的δx是我们可以在Tick中设置的每一帧进行的位移:
(1)
通过进一步分析我们可以知道,t/δt 是 时间t内运行的帧数,这是我们不能控制的量,我们需要想办法根据不同机器下来调整δx使得等式恒成立,直观来说,运行速度快的机器,每秒帧数高,那么每个帧分到的位移就要小。而我们知道,而δx=v*δt ,其中v就是位移的平均速度,v在等式两边都是相等的。则(1)式可变为(2)式:
(2)
那么,到这个地方我们就可以看到了解决问题的办法,我们把不同机器下的δt 与固定的 v 相乘的结果作为 δx的输入,这样就可以实现在不同机器下物体移动具有相同的速度了。