我基本上需要一个 while 循环才能以 30“FPS”的速度运行。 有人告诉我这样做: “在你的 while 循环中,创建一个 deltaT ,如果该 deltaT 小于 33 毫秒,则使用 sleep(33-deltaT) 。”
但我真的不太确定如何初始化增量/将此变量设置为什么。我也无法从提出此建议的人那里得到回复。
我也不确定为什么 sleep 值是 33 而不是 30。
有人知道我能做些什么吗?
这主要是为了让游戏服务器以 30FPS 的速度更新玩家,但是因为我没有在服务器上进行任何渲染,所以我需要一种方法让代码休眠以限制它每秒可以运行的次数或者否则它会处理玩家太快。
最佳答案
你基本上需要做这样的事情:
int now = GetTimeInMilliseconds();
int lastFrame = GetTimeInMilliseconds();
while(running)
{
now = GetTimeInMilliseconds();
int delta = now - lastFrame;
lastFrame = now;
if(delta < 33)
{
Sleep(33 - delta);
}
//...
Update();
Draw();
}
这样你就可以计算当前帧和最后一帧之间经过的毫秒数,如果它小于 33 毫秒(1000/30,1000 毫秒一秒除以 30 FPS = 33.333333....)那么你 sleep 直到 33 毫秒过去。具有 GetTimeInMilliseconds()
和 Sleep()
函数,这取决于您使用的库和/或平台。
关于c++ - 使用 delta 变量 C++ 限制 while 循环在 30 "FPS"处运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008549/