SDL帧率限制实现

4
我刚开始涉及游戏开发,已经使用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();
}

我有一种强烈的感觉,我的计算出了大问题,但是我在网上找到的许多其他实现似乎都很冗长。如果可能的话,我想将帧率限制实现保持在游戏循环内并尽可能简单。感谢任何帮助!


pssst - genpfault
1
欢迎来到 Stack Overflow!如果您相信代码运行正确,请考虑将您的作品(包括单元测试)以更完整的方式展示在 [codereview.se]。您可能会得到一些关于如何使其更高效、易读和更好测试的建议。在这之前,请确保先阅读《Stack Overflow用户的代码评审指南》A guide to Code Review for Stack Overflow users,因为有些事情在那里是不同的——例如,问题标题应该简单地说明代码“做了什么”,因为问题总是,“我该如何改进这个?” - Toby Speight
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接