SDL 帧速率上限实施
Posted
技术标签:
【中文标题】SDL 帧速率上限实施【英文标题】:SDL FrameRate cap implementation 【发布时间】:2018-10-25 23:34:40 【问题描述】:我是游戏开发的新手,我已经使用 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 欢迎来到 Stack Overflow!如果您认为代码可以正常工作,请考虑在Code Review 上以更完整的方式展示您的工作(及其单元测试)。您可能会得到一些建议,使其更高效、更易于阅读和更好地测试。在你这样做之前,请务必先阅读A guide to Code Review for Stack Overflow users,因为那里有些事情的处理方式不同 - 例如。问题标题应该简单地说明代码做了什么,因为问题总是“我该如何改进?”。 【参考方案1】:您应该将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();
【讨论】:
以上是关于SDL 帧速率上限实施的主要内容,如果未能解决你的问题,请参考以下文章