Dt和幀率獨立游戲

Dt和幀率獨立游戲
幀率獨立游戲是指以相同速度運行的游戲,不受FPS(每秒幀數(shù))影響.例如游戲可能在性能比較慢的設備以30FPS運行,在性能比較好的設備以60FPS運行,幀率獨立游戲在兩種性能的電腦上會以相同的速度運行.換一個說法,依賴幀率游戲在性能比較慢的設備上就像以慢動作一樣.制作幀率獨立游戲可以確保玩游戲的設備不管性能的快慢,都有一樣的效果,不會因為FPS降低而影響游戲的可玩性.
這篇教程將會介紹如何制作幀率獨立游戲.
Dt系統(tǒng)概念
制作幀率獨立游戲最重要的一個部分就是Dt系統(tǒng).Dt表示增量時間即獲取上一幀到這一幀的時間.例如在100FPS游戲時Dt將會是0.01秒,在10FPS游戲時Dt將會是0.1,在游戲運行期間Dt是每一幀逐次變化,所以在長時間游戲中,Dt將不會是一個相同的值.
請嘗試制作以下事件,設置一個全局變量時間,設置事件條件每幀執(zhí)行,動作加法運算值設置Dt,然后把文本值設置為全局變量時間.


預覽一下,我們可以看到全局變量一直增加Dt,文本顯示全局變量值,這里我們可以發(fā)現(xiàn)每一秒剛好加1.因為一秒鐘內所有的Dt相加必須為1.

怎么使用Dt
一般我們制作依賴幀率游戲讓對象運動事件如下.

每幀執(zhí)行,猴子對象設置X坐標位置+1,即猴子每幀向右移動一個像素.將游戲在30FPS和60FPS的設備上分別運行會看到不同的效果,在30FPS的設備上猴子每秒向右移動30像素,在60FPS的設備上猴子每秒向右移動60像素.
我們在上面的例子測試了,Dt每秒總是加1,因此我們把事件改成下圖所示.


更改了事件之后,猴子對象在任何FPS的設備上都將會以60像素/每秒向右移動,由于Dt每秒總數(shù)為1,因此60*Dt即每秒增加60.無論在30FPS或者60FPS的設備上,都是以60像素/每秒向右移動.
在哪里使用Dt
如果想要制作幀率獨立游戲時,想要以穩(wěn)定的速度移動對象時,都需要使用Dt來實現(xiàn).例如我們希望對象向前移動,我們可以設置60*Dt向前移動,事件如下圖所示.


能力已經(jīng)默認使用Dt系統(tǒng)
所有喚境Evkworld的能力關于運動計算中都已經(jīng)默認Dt系統(tǒng).即八方向運動,平臺跳躍等速度屬性不需要另外的處理.
不過這里有一個特殊的地方,物理是一個例外,默認情況下,物理不會使用Dt系統(tǒng),物理還是取決于FPS.這是因為Dt系統(tǒng)會有比較小的隨機變化,這種隨機變化會讓物理游戲中相同的設置會產生不同的效果,即使同樣的事件發(fā)生兩次也有可能發(fā)生不同的效果.
時間尺度
在喚境Evkworld有一個非常棒功能是時間尺度.時間尺度可以允許更改游戲中的速率時間.在系統(tǒng)動作”設置時間尺度”來設置游戲中的速率時間.時間尺度為1表示為正常速度,時間尺度為0.5表示比正常速度慢一半,時間尺度為2表示比正常速度快兩倍.例如如果在游戲過程中設置時間尺度更改為0.1,即將游戲以1/10的速度運行,這樣其實就制作了一個慢動作的效果.
時間尺度的原理是更改Dt的返回值.改變時間尺度將會影響使用能力的對象或者使用Dt的事件.如像本教程第一個事件沒有使用Dt系統(tǒng)控制運動,更改時間尺度將不受任何影響.
暫停/恢復游戲中速率時間
我們可以設置時間尺度為0,這樣設置之后將會將游戲中的速率時間為0即暫停效果.重新設置時間尺度為1即把游戲恢復正常.在設置時間尺度為0后,可能有一些點擊事件依然會被觸發(fā),所以可以把這些觸發(fā)事件放進事件組中,在時間尺度為0時,禁用事件組,設置時間尺度為1后,啟用事件組.這樣來制作暫停/恢復游戲功能.
對象的時間尺度
在系統(tǒng)動作中”設置對象的時間尺度”可以對實例對象單獨設置時間尺度,通過單獨設置對象的時間尺度可以讓游戲其他對象慢動作運動,但主角依然可以全速運行.對象有自己的Dt表達式(猴子.dt),在一個游戲中希望不同對象有不同的時間尺度時,設置事件時則分別使用對應的Dt表達式(系統(tǒng).dt或者對象.dt).


其他種類使用Dt
制作幀率獨立游戲時,有關于速度的地方都需要使用Dt系統(tǒng),如角度,加速度等等.
角度

加速度
如下圖所示,為對象建立一個實例變量速度,然后通過事件設置對象向右運動為速度dt每秒,然后設置子事件,當速度<300時,設置速度增加100Dt,即對象加速度為100像素/每秒.


常見錯誤
不要在系統(tǒng)條件”每隔X秒”中使用Dt系統(tǒng).無論設備的FPS如何,”每隔X秒”條件都不受FPS影響.這個條件判斷的是時間而不是幀.例如如果你設置一個”每隔60*dt”秒條件,那么這個條件將會根據(jù)FPS產生變化,在100FPS(Dt=0.01)設備中,這個條件將會是每隔0.6(60 * 0.01)秒觸發(fā)一次,若在10FPS(Dt=0.1)設備中,這個條件將會是每隔6秒(60 * 0.1)秒觸發(fā)一次.所以當使用”每隔X秒”條件時,不需要使用DT系統(tǒng).

點擊下載全能無需編程的喚境引擎!
https://www.evkworld.cn/?c=600005&sc=600019&auto=1