我对游戏开发非常陌生,而且我已经使用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();
}
我有一种很好的感觉,我可怕地搞砸了我的计算,但我在网上找到的许多其他实现通常看起来很长。如果可能的话,我想在游戏循环中保持框架帽实现,并尽可能简单。任何帮助表示赞赏!
答案 0 :(得分:0)
您应将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();
}
}