首页 > 解决方案 > SDL 帧速率上限实施

问题描述

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

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

标签: c++sdlframe-rategame-loop

解决方案


您应该将该行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();
    }
}

推荐阅读