使用增量变量C ++将while循环限制为以30“ FPS”运行

Joe*_*Bid 3 c++ loops frame-rate delta

我基本上需要一个while循环才能仅以30“ FPS”运行。我被告知要这样做:“在while循环中,创建一个deltaT,如果该delT小于33毫秒,请使用sleep(33-deltaT)。”

但是我真的不太确定如何初始化增量/设置此变量的方式。我也无法从提出此建议的人那里得到答复。

我也不确定为什么睡眠中的值是33而不是30。

有谁知道我能做些什么?

这主要是为了使游戏服务器以30FPS的速度更新玩家,但是由于我没有在服务器上进行任何渲染,因此我需要一种方法来使代码处于睡眠状态,以限制每秒可以运行多少次,否则它将处理玩家的速度过快。

UnT*_*aDe 5

您基本上需要执行以下操作:

int now = GetTimeInMilliseconds();
int lastFrame = GetTimeInMilliseconds();

while(running)
{
    now = GetTimeInMilliseconds();
    int delta = now - lastFrame;
    lastFrame = now;

    if(delta < 33)
    {
        Sleep(33 - delta);
    }

    //...
    Update();
    Draw();
}
Run Code Online (Sandbox Code Playgroud)

这样,您就可以计算当前帧和最后一帧之间经过的毫秒数,如果它小于33毫秒(1000/30,则一秒为1000毫秒除以30 FPS = 33.333333 ....),则您可以休眠到33毫秒已过去。拥有GetTimeInMilliseconds()Sleep()功能,它依赖于库,你正在使用和/或平台。