检测游戏循环中碰撞的最佳时机



考虑这样的游戏循环:

while (gamerunning) {
    if (it is time to update physics)
        update(fixedTickDuration);
    alpha = percent of tick elapsed;
    draw(alpha);
}

更新功能根据对象的速度等移动对象,目前还进行碰撞处理。draw函数在先前实体状态和当前实体状态之间进行插值,以绘制中间表示。它总是落后一帧。

问题:我们是否应该使用实体插值坐标在绘图函数中进行碰撞检测和处理?draw函数中的这种处理可能会进一步改变将要绘制的内容。

不,原因有几个,主要是你不想依赖渲染速度来更新游戏。您可以将游戏更新帧速率固定为适当的帧速率,并允许渲染率根据处理环境而变化(根据功能的不同而更快或更慢)。

独立于可变FPS的恒定游戏速度示例:

while( game_is_running ) {
    loops = 0;
    while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) {
        update_game();
        next_game_tick += SKIP_TICKS;
        loops++;
    }
    interpolation = float( GetTickCount() + SKIP_TICKS - next_game_tick )
                    / float( SKIP_TICKS );
    display_game( interpolation );
}

来自这个非常好的游戏循环注意事项概述的代码:

http://www.koonsolo.com/news/dewitters-gameloop/

最新更新