【发布时间】:2024-01-04 11:48:01
【问题描述】:
我已经编写了这段代码来将 SDL 游戏的速度限制为 60 fps,这是实现 fps 计数的正确方法吗?
int fps=60;
int desiredDelta=1000/fps; //desired time b/w frames
while (gameRunning)
{
int starttick=SDL_GetTicks();
// Get our controls and events
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
gameRunning = false;
}
window.Clear();
for(Entity& e: entities)
{
window.Render(e);
}
window.Display();
int delta=SDL_GetTicks()-starttick; //actual time b/w frames
int avgFPS=1000/(desiredDelta-delta); //calculating FPS HERE
if(delta<desiredDelta)
{
SDL_Delay(desiredDelta-delta);
}
std::cout<<avgFPS<<std::endl;
}
【问题讨论】:
-
不是您的问题的答案,但是您是否会尝试将渲染限制为屏幕刷新率?因为如果这是您的实际意图,您可以启用 VSync 并完成它。
-
是的,我添加了垂直同步标志,但我认为您仍然需要手动限制 fps 对吧?我正在看 codergopheers 教程,他添加了一个时间步长,我认为这就像一个帧速率上限
-
如果您启用了 vsync,那么您的框架对结果的实际呈现应该会被适当地阻止(我对 SDL 的了解不够,无法将您指向正确的文档,唉)。您仍然需要跟踪时间,这样您就可以知道经过了多少时间并且可以适当地计算世界更新(因此您的游戏在 100Hz 显示器上的速度不会比在 60Hz 显示器上快 66%)。
标签: c++ sdl frame-rate game-development