8_游戏循环
``` while (true) { Event* event = waitForEvent(); dispatchEvent(event); } while (true) { processInput(); update(); render(); } ``` 游戏循环在游戏运行期间一直执行,每次循环,会处理用户输入,更新游戏状态,渲染场景等. 记录循环时间,来控制游戏的节奏(rate). ``` \\ 锁定帧率 while (true) { double start = getCurrentTime(); processInput(); update(); render(); sleep(start + MS_PER_FRAME - getCurrentTime()); } \\ elapsed, 帧率不固定, 但是游戏使用时间差来进行更新 \\ 不同的帧率下,物理运动结果是一样的 double lastTime = getCurrentTime(); while (true) { double current = getCurrentTime(); double elapsed = current - lastTime; processInput(); update(elapsed); render(); lastTime = current; } ``` ``` \\ 定时执行(每隔多少毫秒执行一次),更有效率的模拟物理 ai 等等 double previous = getCurrentTime(); double lag = 0.0; while (true) { double current = getCurrentTime(); double elapsed = current - previous; previous = current; lag += elapsed; processInput(); while (lag >= MS_PER_UPDATE) { update(); lag -= MS_PER_UPDATE; } render(); // 防止物体跳动 render(lag/MS_PER_UPDATE); } ``` ### power consumption 1 帧率尽量的高. 会带来更好的体验,也会跟耗电, 发热更多 2 限制帧率. 带来足够好的体验,并且降低电量消耗