//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之间的整数进行任何数学运算。不会带你走。

09-06 11:27