//Calculate time step
float timeStep = stepTimer.getTicks() / 1000.f;
//Move for time step
dot.move( timeStep );
//Restart step timer
stepTimer.start();
从Lazy Foo的SDL教程中获得的这段代码应该产生一个基于可变时步的运动系统。我的主要问题是如何运作?
float timeStep = stepTimer.getTicks() / 1000.f;
以秒为单位计算经过时间。因此,如果说自上次移动调用以来已过去2毫秒,则timeStep var将为0.02秒。那在代码中怎么可能使用?如果我具有每秒10像素的恒定速度,并且想要使该速度与任何帧速率一起工作,则必须将px / s乘以该值(0.02)。但是,这将导致以下
posx += 10*0.02
。正如我们刚刚了解到的,这意味着我们将位置增加0.2像素(这当然不会起作用,只会使该值降低)。我在这里想念什么?
最佳答案
您可以在代码中维护位置变量;一个浮点值,它是精确的并且接受微小的变化,一直到有效位数(对于32位浮点数为ca 7,对于64位浮点数为14)。
然后从中绘制到屏幕上。
一段时间后,它将转换(或说取整)为一个像素,过一会再转换为相邻像素,依此类推。
您的错误是您使用(或以这种方式解释)像素地址作为位置数据。屏幕仅具有非常有限的“数字空间”。考虑仅使用0到2000之间的整数进行任何数学运算。不会带你走。