我仍然是SFML的新手,现在我正在尝试制作一个基本的滚动平面游戏。我已经掌握了大部分基本内容,但我开始注意到屏幕看起来很迟钝。我正在使用window.setFrameRateLimit函数,以便所有计算机上的移动结果相同,但它会在程序执行时发生随机延迟峰值。我认为这样做是因为帧速率的限制,以及它是如何做到的。是否有另一种更好的方法只让程序在特定时间执行?理想情况下,它也会在较慢的计算机上以相同的速度移动。
答案 0 :(得分:1)
似乎在SFML 2.0中修复了setFrameRateLimit延迟峰值。如果无法升级到SFML 2.0,则可以添加自己的帧速率限制器。这包括在游戏循环中添加sleep()。例如:
while(App.IsOpened()) {
float time = Clock.GetElapsedTime();
// update game
// draw game
float timeToWait = (1.0 / FRAMES_PER_SECOND) - (Clock.GetElapsedTime() - time);
if(timeToWait > 0) {
sleep(timeToWait * 1000);
}
}