【发布时间】:2012-07-05 21:08:05
【问题描述】:
虽然以下代码可以节省一些电量,但 FPS 的上限并不正确。当它应该将帧速率锁定在 60 FPS 时,我得到 82。30 帧也是如此,我得到 49 FPS。
计算 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 (暗示整数除法和舍入误差)或 float ?顺便说一句,更好的 fps 计算不会依赖于 2 个输出之间经过一秒这一事实,而是使用 currentTime 和 lastOutput 之间的差异来提高准确性。
-
浮动。我不太明白你所说的关于 FPS 计算的内容。
-
您应该尝试一次步进 1 毫秒。这将为您提供更好的精度。请注意,您永远无法获得准确的 60fps,因为以这种方式计时是不准确的。
标签: c++ sdl limit frame-rate