第32節 - LibGDX: Delta Time
這一節我會介紹LibGDX的Delta Time。
我在第31節 - LibGDX: Lifecycle (Render() Method)介紹過LibGDX的render()方法,它會不斷循環執行,一秒30至80次(通常60 Frame per Second, FPS),根據手機硬件速度而正。
要解決以上速度問題,我們可以用LibGDX的Gdx.graphics.getDeltaTime(),它可以敢得兩格(two frames)動畫之間的時間,用來控制動畫的速度,我會詳細介紹。

- xPosition = xPosition + (speed*deltaTime); 是依靠時間的(Time dependent),deltaTime在60FPS會是30 FPS的一半,所以動畫的速度不會受手機硬件速度影響。
60 FPS - 150 x 0.01667s x 60次 = 150。
30 FPS - 150 x 0.03333s x 30次 = 150。
結果相同!
速度方程式 (Velocity Equation)
以下是Velocity, Distance & Time的數學方程式,圖片(hero1.png)的速度(velocity)=距離(distance)/時間(time),如下圖:

距離方程式(Distance Equation)
要找出圖片(hero1.png)的新位置,我們可以用以下數學方程式,圖片(hero1.png)的新位置=舊距離+移動距離,如下圖:

電腦方程式1 (Computational Equation No.1) - Time Independent
用電腦程式計算新距離,可以用以下方法:

注意,deltaD=5;代表每次把距離增加5px,數值越大代表移動越快,所以很多時會簡化用"Speed"代替,不過"Speed"的單位不是"速率",而是與"distance"一樣(例如: pixel, px),如下圖:

電腦方程式2 (Computational Equation No.2) - Time Dependent
要解決以上速度問題,我們可以用LibGDX的Gdx.graphics.getDeltaTime(),它可以敢得兩格(two frames)動畫之間的時間,用來控制動畫的速度,如下圖:

- xPosition = xPosition + (speed*deltaTime); 是依靠時間的(Time dependent),deltaTime在60FPS會是30 FPS的一半,所以動畫的速度不會受手機硬件速度影響。
60 FPS - 150 x 0.01667s x 60次 = 150。
30 FPS - 150 x 0.03333s x 30次 = 150。
結果相同!
例子1 - 30FPS (Time Independent)
例子1沒有用到deltaTime變數,所以動畫的速度會根據手機硬件速度而正,最後行了150px。

例子2 - 60FPS (Time Independent)
例子2沒有用到deltaTime變數,所以動畫的速度會根據手機硬件速度而正,例子2會是例子1的兩倍,最後行了300px。

例子3 - 30FPS (Time Dependent)
例子3用到deltaTime變數,所以動畫的速度不會根據手機硬件速度而正,最後行了150px。

例子4 - 60FPS (Time Dependent)
例子4用到deltaTime變數,所以動畫的速度不會根據手機硬件速度而正,例子4和例子3的速度相同,最後行了150px。
