我已经在我的游戏循环中实现了增量时间,因此帧速率的任何波动都不再重要,但是游戏在更快的机器上运行速度更快,在慢速机器上运行速度更慢?
我的印象是,大多数游戏以固定速率(每秒60次)更新逻辑,然后执行尽可能多的渲染。如何使更新循环次数达到我想要的次数?
答案 0 :(得分:1)
只需使用累加器...每次游戏循环运行时,+ =经过的时间增量。一旦该时间大于16.6666667秒,运行更新逻辑并从您的时间减去60秒。继续运行更新方法,直到累加器为< 60秒: - )
伪码!
const float updateFrequency = 16.6666667f;
float accumulator = updateFrequency;
public void GameLoop(float delta)
{
// this gets called as fast as the CPU will allow.
// assuming delta is milliseconds
if (accumulator >= updateFrequency)
{
while (accumulator >= updateFrequency)
{
Update();
accumulator -= updateFrequency;
}
}
// you can call this as many times as you want
Draw();
accumulator += delta;
}
这种技术意味着如果绘制方法花费的时间比更新频率更长,它就会赶上来。当然,你必须要小心,因为如果你的绘制方法通常需要超过1/60秒,那么你将遇到麻烦,因为你总是必须在两次抽签之间多次调用更新,这可能会导致渲染中的打嗝。