SDL FrameRate上限实现

时间:2018-05-16 03:15:09

标签: c++ sdl frame-rate game-loop

我对游戏开发非常陌生,而且我已经使用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();
}

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

1 个答案:

答案 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();
    }
}