2014-05-10 23 views
0

所以基本上我想繪製每一次即使當窗口移動,因爲我使用增量時間來移動動畫和東西。這意味着如果opengl停下來,時間還在繼續,有時它會讓玩家穿過牆壁並閃爍到其他地方:/這是如何解決的?我已經嘗試使用線程,但它不工作(或至少我編錯了)。OpenGL在移動窗口時停止繪圖lwjgl

回答

1

如果deltaT太大,你可以控制它。或者,如果你有不同的調用渲染和移動(我建議,無論如何,所以你可以放棄渲染幀沒有非常大的運動),並且deltaT變得太大,分解成幾個較小的調用。

旋蓋:

public void update(int deltaMs) { 
    if (deltaMs > 100) { 
    deltaMs = 100; 
    } 
    ... 

分割開來更新渲染和做小的更新:

public void update(int deltaMs) { 
    while(deltaMs > 100) { 
     updateImpl(100); 
     deltaMs -= 100; 
    } 
    updateImpl(deltaMs); 
    render(); 
} 

你甚至可以結合這兩種方法:

public void update(int deltaMs) { 
    // Cap at one second. 
    if (deltaMs > 1000) { 
    delatMs = 1000; 
    } 

    // Handle movements in small steps to avoid going through walls etc. 
    while(deltaMs > 100) { 
     updateImpl(100); 
     deltaMs -= 100; 
    } 
    updateImpl(deltaMs); 

    render(); 
} 
+0

我應該封蓋增量更容易比打破渲染呼叫分開..你怎麼實際上做這個封頂? – Greffin28

+0

我已經勾畫出上面的答案大概應該是什麼樣子。 –

+0

嘿謝謝:D,但不打破更新分開,如果我們得到讓我們說8因爲重大滯後,可以使無限循環? – Greffin28