SDL 帧速率上限实施

SDL FrameRate cap implementation

本文关键字:帧速率 SDL      更新时间:2023-10-16

我是游戏开发的新手,我已经使用 SDL2 制作了一些程序。帧速率不是什么大问题,因为我从未打算发布这些程序,只是使用SDL_RENDER_PRESENTVSYNC将帧速率限制为 60(显示器的刷新率(。现在我想制作一个可以发送给朋友的应用程序,我想知道我的帧速率实现是否好。

unsigned int a = SDL_GetTicks();
unsigned int b = SDL_GetTicks();
double delta = 0;
while (running)
{
a = SDL_GetTicks();
delta += a - b;
if (delta > 1000/60.0)
{
std::cout << "fps: " << 1000 / delta << std::endl;
Update();
Render();
delta = 0;
}
b = SDL_GetTicks();
}

我有一种很好的感觉,我已经把我的计算搞砸了,但我在网上找到的许多其他实现通常看起来很冗长。如果可能的话,我希望将帧帽实现保持在游戏循环中并尽可能简单。任何帮助表示赞赏!

您应该将行b = SDL_GetTicks();放在if语句内和Update();之前。delta = a - b而不是delta += a - b. 您也可以使用b=a而不是调用SDL_GetTicks()函数。

while (running)
{
a = SDL_GetTicks();
delta = a - b;
if (delta > 1000/60.0)
{
std::cout << "fps: " << 1000 / delta << std::endl;
b = a;    
Update();
Render();
}
}