1

我对 SFML 还是很陌生,现在我正在尝试制作一个基本的滚动平面游戏。我已经完成了大部分基本内容,但我开始注意到屏幕看起来很迟钝。我正在使用 window.setFrameRateLimit 函数,以便所有计算机上的移动结果都相同,但它会在程序执行时发生随机延迟峰值。我认为它这样做是因为帧速率的限制,以及它是如何做到的。还有另一种更好的方法让程序只在特定时间执行吗?理想情况下,它也会在速度较慢的计算机上以相同的速度移动。

4

1 回答 1

1

似乎 setFrameRateLimit 滞后峰值已在 SFML 2.0 中修复。如果您无法升级到 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);
   }
}
于 2013-08-16T03:51:20.020 回答