2012-03-11 38 views
1

考慮遊戲循環是這樣的:最好的時刻檢測碰撞在遊戲循環

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

更新功能移動基於其速度等對象,目前也不會衝突處理。繪製函數在先前和當前實體狀態之間進行插值以繪製中間表示。它始終落後於一幀。

問題:我們是否應該使用實體插補座標在繪圖函數中進行碰撞檢測和處理?這種繪圖功能的處理可能會進一步改變繪製的內容。

回答

1

不,有幾個原因,主要是您不希望依賴渲染速度進行遊戲更新。您可以將遊戲更新幀速率固定爲適當的值,並允許渲染速率根據處理環境而變化(取決於功能更快或更慢)。

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/

獨立變量FPS的恆定遊戲速度的

實施例