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

时间:2012-03-11 18:29:46

标签: collision-detection

考虑这样的游戏循环:

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

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

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

1 个答案:

答案 0 :(得分:1)

不,由于一些原因,主要是你不想依赖渲染速度进行游戏更新。您可以将游戏更新帧速率修复为适当的值,并允许渲染率根据处理环境而变化(根据功能更快或更慢)。

独立于变量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/