这是我的游戏循环代码:
while (shouldUpdate)
{
timeSinceLastUpdate = 0;
startTime = clock();
while (timeAccumulator >= timeDelta)
{
listener.handle();
em.update();
timeAccumulator -= timeDelta;
timeSinceLastUpdate += timeDelta;
}
rm.beginRender();
_x->draw();
rm.endRender();
timeAccumulator += clock() - startTime;
}
它运行几乎完美,但它有一些抖动,每秒几次而不是 _x(它在更新中所做的所有测试实体都是 x++)向右移动 1 个像素,它实际上向右移动 2 个像素并且这是一个明显的滞后/抖动效应。我猜 clock() 不够准确。那么我能做些什么来改善这个游戏循环呢?
如果重要的话,我会使用 SDL 和 SDL_image。
编辑:做了比时钟更准确的事情后没有任何改变。但是,我发现,这一切都归功于 timeDelta。这就是我发表这篇文章时 timeDelta 的定义方式:
double timeDelta = 1000/60;
但是当我在乱七八糟的时候把它定义为别的东西......
double timeDelta = 16.666666;
我注意到游戏开始的最初几秒钟,它像黄油一样光滑。但仅仅几秒后,游戏就卡顿得厉害,然后又恢复了流畅,就这样重演了一遍。我添加的 6 (或 . 之后的任何内容)越多,游戏最初流畅的时间越长,并且延迟越严重。似乎浮动错误正在攻击。那我该怎么办?
EDIT2:我已经尝试了很多东西,现在它甚至都不好笑......有人可以帮我解决循环的数学部分吗?既然这就是造成这种情况的原因...
EDIT3:我给一些人发了一个测试程序,有人说它非常流畅,其他人说它像我描述的那样紧张。对于愿意在这里测试它的任何人,它是(src):https ://www.mediafire.com/?vfpy4phkdj97q9j
EDIT4:我将链接更改为 source code。