我在我的游乐场项目中使用SDL,但我有点担心我的PC表现——它太高了或者我只是胡思乱想。问题是,当我改变某个精灵的坐标时,比如说按下键盘上的某个键时,将其移动
通常(在SFML中),我会通过以下方式更改速度:
做
有人能给我一些建议应该怎么办吗? 注意:将SDL更改为xxx不是一个好建议:)
2px
,精灵会移动得太快了。对于速度为1px
也是同样的情况。通常(在SFML中),我会通过以下方式更改速度:
1.f / App->GetTimeSinceLastFrame()
,这运作得非常完美!但现在我想要使用SDL。我不能选择延迟,因为在不同的机器上它们不会相同(这肯定是一种非常丑陋的方法),或者浮点值转换会因为以下原因而无法实现。做
lastTicks = SDL_GetTicks()
然后使用1.f / (float) SDL_GetTicks() - lastTicks()
就做得很糟糕——差异总是零。所以要么我错了,要么两帧之间的时间太短,以至于被舍入为0
。有人能给我一些建议应该怎么办吗? 注意:将SDL更改为xxx不是一个好建议:)
SDL_GetTicks
只有毫秒级的分辨率,因此对于高帧率来说,差异将大多数情况下为零(因此在某种意义上是四舍五入的,但应该会积累并偶尔变成一)。确保只使用一个调用,因此cur=get();diff=cur-last;last=cur;
。更高分辨率的计时方法也可能会有所帮助。 - jozxyqk