仅在SFML中的某些帧上执行

Only Execute on Certain Frames in SFML

本文关键字:执行 SFML 仅在      更新时间:2023-10-16

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

似乎在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);
   }
}