11
什么时候应该使用固定或可变时间步长?
游戏循环应该基于固定时间段还是可变时间段?一个人永远是上等的,还是正确的选择会因游戏而异? 可变时间步长 物理更新传递了“自上次更新以来经过的时间”参数,因此与帧速率有关。这可能意味着要进行计算position += distancePerSecond * timeElapsed。 优点:流畅,更易于编码 缺点:不确定性,无论步长或步长都是不确定的 deWiTTERS示例: while( game_is_running ) { prev_frame_tick = curr_frame_tick; curr_frame_tick = GetTickCount(); update( curr_frame_tick - prev_frame_tick ); render(); } 固定时间步 更新可能甚至不接受“经过的时间”,因为它们假定每次更新都是在固定的时间段内进行的。计算可以按进行position += distancePerUpdate。该示例包括渲染期间的插值。 优点:可预测,确定性(更容易进行网络同步?),更清晰的计算代码 缺点:不同步以监控垂直同步(除非进行插值,否则会引起抖动的图形),最大帧速率受限(除非进行插值),难以在框架内工作采取可变的时间步长(例如Pyglet或Flixel) deWiTTERS示例: while( game_is_running ) { while( GetTickCount() > next_game_tick ) { update(); next_game_tick += SKIP_TICKS; } interpolation …