c++ - 使用 delta 变量 C++ 限制 while 循环在 30 "FPS"处运行

标签 c++ loops frame-rate delta

我基本上需要一个 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/

相关文章:

c++ - 将 std::deque 的现有元素推到前面?

javascript - 如何判断 Canvas 动画何时结束

java - 为什么我的字符串索引超出范围?

java - 我第一次尝试玩 Java 游戏时,在读取图像时以 7 fps 结束?

c++ - SOA项目中用什么C或C++工具自动生成WSDL?

c++ - 没有实例化的属性除数?

c++ - C/C++ 中的运算符与函数

c - Gets/fgets跳过C中的输入步骤

iPhone OpenGL fps 测试

ffmpeg - 当输入是实时相机设备时,使用输入帧率选项(在 FFmpeg 中)时的预期行为是什么?