虽然下面的代码可以节省一些电能,但FPS的上限并不正确。当它应该以60 FPS锁定帧速率时,我得到82.同样的30,我得到49 FPS。C++ - SDL:限制帧率问题
计算FPS:
previousTime = currentTime;
currentTime = SDL_GetTicks();
fps_++;
if (currentTime - lastOutput >= 1000)
{
lastOutput = currentTime;
fps = fps_; // the variable 'fps' is displayed
fps_ = 0;
}
限制FPS:
if (currentTime - previousTime < 1000/maxFPS)
{
SDL_Delay(1000/maxFPS - currentTime + previousTime);
}
我是怎么陷入困境?
是什么maxFPS的类型? int(暗示整数除法和舍入误差)还是浮点数? 顺便说一句,更好的fps计算不会依赖于2个输出之间经过一秒的事实,使用currentTime和lastOutput之间的差异来提高准确性。 – Zeograd 2012-07-05 12:55:48
浮动。我没有完全理解你对FPS计算的看法。 – Aaron 2012-07-05 13:17:47
您应该一次尝试步进1ms。这会给你更好的精度。请注意,您永远不会准确地达到60fps,因为以这种方式进行计时很不准确。 – imallett 2012-07-06 01:40:25