我已經編寫了一個基於用戶輸入的動畫精靈程序,所有這些都發生在while(true)
循環中。到目前爲止,我一直在計算循環的唯一方法是在循環的每次運行結束時都有一個sleep(20)
。我已經注意到這個效應對我的精靈的物理造成負面影響,因爲我的計算重力的公式是velocity = velocity + GRAVITY * Elapsed-Time
,並且因爲循環沒有以一致的速度運行,所以重力效應也不一致。 有沒有辦法讓循環運行一致或更好的計時方式,以便它實際上按計劃運行?如何使渲染循環以一致的速率運行?
0
A
回答
2
首先,確定你想要你的幀持續多久。如果你想每秒30幀,那麼你就必須
final long frameDuration = 1000/30;
接下來,當你開始渲染,存儲時間,像這樣
final long then = System.currentTimeMillis();
render(); // surely it's more than this but you get the idea
final long now = System.currentTimeMillis();
final long actualDuration = now - then;
final long sleepDuration = frameDuration - actualDuration;
if(sleepDuration > 0) {
sleep(sleepDuration);
} else {
throw new FrameTooLongException();
}
0
velocity = velocity + GRAVITY * Elapsed-Time
無論你的幀頻這應該工作恆定或不恆定。訣竅是準確地測量經過時間&。測量從循環中的某個點到下一個循環中相同點的經過時間。
相關問題
- 1. OpenGL ES 2.0:如何以低分辨率渲染frameBuffer以進行環境映射?
- 2. Java渲染循環和邏輯循環
- 3. 渲染循環 - 最大並行
- 4. 動態渲染在快速使用循環將不起作用
- 5. 循環渲染視圖
- 6. 渲染效率
- 7. 可以link_to導致渲染?
- 8. 如何渲染是使用underscore.js每個循環的TREE JSON?
- 9. 與硬件渲染相比,軟件渲染導致CPU使用率降低
- 10. 渲染不運行
- 11. Laravel渲染問題的'foreach'循環
- 12. Poppler:以目標分辨率渲染
- 13. 以相同的速度運行的Javascript遊戲循環?
- 14. MVC渲染加速
- 15. Ext.toast渲染速度
- 16. 使用不同變量以相同的速率遍歷一個循環
- 17. 如何運行while循環?
- 18. 如何運行循環?
- 19. 渲染導致低幀率時使用多個紋理
- 20. jinja2蟒蛇渲染「for循環」
- 21. D3 Javascript循環無法渲染
- 22. Knockout Foreach循環渲染太多元素
- 23. 在cocos2d-x中渲染循環
- 24. 如何運行循環的快速枚舉?
- 25. 如何使用React JS中的循環來渲染或不渲染基於條件的表數據?
- 26. 如何加速AngularJS渲染大範圍?
- 27. PlayFramework - 運行使用JSON渲染
- 28. 爲什麼angularJS循環渲染框在新的行
- 29. css3過濾器的一致渲染
- 30. 不一致的文本渲染
是的。我不明白爲什麼。我總是在相同的時間點獲得流逝的時間,但我的精靈跳轉的高度似乎仍然不一致。 – 2012-07-20 17:20:24
您還必須使用'position = position + velocity * Elapsed-Time'相同的經過時間。當然,舍入誤差和時間離散化誤差可能會蔓延(但如果使用雙精度和毫秒,我會期望它們很小)。 – 2012-07-20 18:13:02