作为一名学生,我一直想成为一名游戏开发者。到目前为止,我已经设法学习了C ++和SFML 2.1的基础知识
对于我的第一个项目,在决定制作2D RPG-ish游戏时,我遇到了一个问题,即游戏循环刷新得如此之快,以至于如果我每帧移动1个像素,精灵的移动速度会超出我的预期到。
我实现了一个帧确定的移动系统(不知道它叫什么),无论fps是什么,角色都以相同的速度移动。
然而,我无法解决问题(这就是我要问的)精灵不能顺利移动。我的构建中发生的事情是玩家每帧移动大约1px,并且可以被其他输入中断。我怎么能这样做?
TL; DR:我想像老式RPG游戏一样移动我的精灵,顺利移动预定像素(或瓷砖)。
答案 0 :(得分:0)
每秒处理循环的次数在统计上是随机的。在计算机中还有很多事情要发生,并且不能保证给你的程序时间不变。你需要按时运动。
在SFML中我喜欢
window.setFramerateLimit(60);
这将给我一个非常好的尝试,每秒60帧。它与现实非常接近,无法区分它。
从那里我想假设每个帧都会收到
float timeStep = 1.0f/60.0f.
我用这个时间步来控制动作。因此,如果我希望我的汽车每秒驱动10个像素,那么在大游戏循环的每次迭代中,我们都会使用时间步长。
currentPosition += carSpeed * timeStep