0
所以基本上我想繪製每一次即使當窗口移動,因爲我使用增量時間來移動動畫和東西。這意味着如果opengl停下來,時間還在繼續,有時它會讓玩家穿過牆壁並閃爍到其他地方:/這是如何解決的?我已經嘗試使用線程,但它不工作(或至少我編錯了)。OpenGL在移動窗口時停止繪圖lwjgl
所以基本上我想繪製每一次即使當窗口移動,因爲我使用增量時間來移動動畫和東西。這意味着如果opengl停下來,時間還在繼續,有時它會讓玩家穿過牆壁並閃爍到其他地方:/這是如何解決的?我已經嘗試使用線程,但它不工作(或至少我編錯了)。OpenGL在移動窗口時停止繪圖lwjgl
如果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();
}
我應該封蓋增量更容易比打破渲染呼叫分開..你怎麼實際上做這個封頂? – Greffin28
我已經勾畫出上面的答案大概應該是什麼樣子。 –
嘿謝謝:D,但不打破更新分開,如果我們得到讓我們說8因爲重大滯後,可以使無限循環? – Greffin28