2010-11-05 80 views

回答

3

請勿使用幀速率來測量時間。用時間來衡量時間。 GC通行證可能需要3/10秒,其他任務可以在後臺啓動等等。

總是有一個系統/設置會比您想象的慢。

然後,您不指定以像素爲單位的速度,但以像素/秒爲單位。每幀動畫需要一定的時間等等。在你的遊戲引擎中,當計算下一幀時,你的輸入之一是「從最後一幀開始已經過了多少時間」。您將該值確定爲秒的一小部分,並將速度/秒乘以該分數。結果是Given Thing從最後一幀開始移動了多遠。

請注意,非常慢的幀速率可能會對碰撞檢測造成嚴重破壞,特別是對於快速移動的物體。如果事情1在幀之間完全通過第2項,只是檢查BBoxes或半徑不會削減它。睡眠()是你的朋友。在幀處理開始時,請致電System.currentTimeMilis()。在幀處理結束時(包括渲染),再次檢查當前時間。如果差異不夠長,需要足夠的時間睡眠(N)以匹配您期望的幀速率。所以如果你想要20fps最大,那麼每個幀應該需要50ms(1000ms/20 = 50ms)。如果一幀只花了10ms來模擬和渲染,那麼在移動到下一幀之前,您需要睡眠另一個(50ms - 10ms =)40ms。

或者,您可以儘可能快地繼續運行模擬,並且每隔一段時間只渲染一次屏幕。這對電池壽命沒有多大幫助(雖然OpenGL硬件加速如果來自我的Evo的熱量有任何跡象,但價格昂貴),但可以提供非常流暢的體驗。哎呀,你可以開始計算這個點上的運動模糊。

相關問題