仅在SFML中的某些帧上执行

时间:2013-08-15 22:41:29

标签: c++ frame sfml

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

1 个答案:

答案 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);
   }
}