1. 程式人生 > >cocos Creator計時器schedule的使用和坑

cocos Creator計時器schedule的使用和坑

在遊戲開發中,經常會用到計時器,在cocos引擎中,為我們預設提供了多種計時器的使用。在最新的cocos開發工具Cocos Creator中,我們有4種計時器可以使用,分別是js自帶的setTimeOut、interval以及cocos的schedule和scheduleOnce,setTimeOut和scheduleOnce都是執行幾次操作,指定一定時間後執行,interval和schedule都是可以指定執行次數的。這裡主要對schedule進行相關的說明,因為這裡面有一個坑。

當我們將一個元件掛在是一個控制元件上後,例如,我們在一個飛機大戰的遊戲中,想建立子彈,就可以用schedule每隔一段時間進行建立,或者,每隔一段時間,進行一些其他的操作等。但是,最近在使用schedule的時候,發現了一個大坑,或許,也是自己對這個東西不熟悉,但不管怎樣,還是將這個東西分享出來,方便他人的使用,防止別人入坑,也算是記錄一下自己在開發中的心得。大家都知道,schedule一般可以傳3或者4個引數,3個引數的使用如下:

component.schedule(function() {
     this.doSomething();
 }, interval, repeat);
如果就是當前的指令碼中,就可以直接用this.schedule了,第一個就是回撥方法,一般來說,如果要用當前元件中的方法,需要寫成function(){}.bind(this)的形式,否則會報錯,這裡的interval當然是時間間隔,以秒為單位,每隔interval就執行一次,repeat就是重複執行的次數,預設情況下,當repeat為0的時候,會執行一次,這個repeat表示重複執行次數,是在已經執行過一次之後的重複次數,這點值得注意。還有一種用法,是延時執行的,用法如下:
component.schedule(function() {
     this.doSomething();
 }, interval, repeat, delay);
這裡只不過是多了一個delay,別的沒有什麼區別,總共會執行裡面的方法repeat+1次,第一次在delay時間之後執行,然後每隔interval秒執行一次裡面的方法。然而,問題來了,如果將delay設定成0,是否會立刻執行呢?顯然,並不是這樣的!這就是這個計時器的坑。如果將delay置為0,預設情況下,第一次執行仍然會延時,而且延時時間是interval。因此,在開發中,如果要開啟多個計時器,而且,每隔計時器的延時時間都不一樣,但是,卻有一定規律,例如,在for迴圈中建立5個計時器,每個計時器的delay = i;這樣就會出問題,第一個計時器的delay設定為0,但是實際上變成了interval,為了避免這種事情發生,可以將讓delay = i + 0.1,只要給一個初始的很小的值就好了,或者,判斷一下,當i = 0 的時候,就不呼叫帶delay的方法,直接呼叫第一個方法就行了,這樣,就避免了這種問題的發生。