Cocos Creator中定時(shí)任務(wù)的實(shí)現(xiàn)
在Cocos Creator游戲開發(fā)中,經(jīng)常需要使用定時(shí)任務(wù),例如,賽車游戲游戲開始前的倒計(jì)時(shí),玩家游戲結(jié)束之后等待3秒進(jìn)入下一局,打地鼠游戲中,地鼠出洞3秒后消失,飛機(jī)大戰(zhàn)中飛機(jī)每隔1秒鐘發(fā)射一顆子彈等等。
由于其應(yīng)用場景非常多,因此, Cocos Creator 中為我們提供了方便的計(jì)時(shí)器,這個(gè)計(jì)時(shí)器源自于 Cocos2d-x 中的 cc.Scheduler,它保留在了 Cocos Creator 中并適配了基于組件的使用方式。
也許有人會(huì)認(rèn)為使用JS中的 setTimeout 和 setInterval 就足夠了,但是作為開發(fā)者當(dāng)然可以使用這兩個(gè)函數(shù),不過使用Cocos Creator進(jìn)行游戲開發(fā),我們更推薦使用計(jì)時(shí)器,因?yàn)樗訌?qiáng)大靈活,和組件也結(jié)合得更好!
下面來看看它的具體使用方式:
【1】schedule執(zhí)行定時(shí)任務(wù)的簡單用法
例如:某個(gè)任務(wù)需要每隔1秒執(zhí)行一次,代碼如下:
component.schedule(function() {
? ?this.doSomething(); // 這里的 this 指向 component
}, 1);
【2】schedule執(zhí)行定時(shí)任務(wù)的靈活用法
例如:某個(gè)任務(wù)需要在10秒后開始執(zhí)行,每5秒執(zhí)行一次回調(diào),重復(fù)3次。
var interval = 5; // 以秒為單位的時(shí)間間隔
var repeat = 3; // 重復(fù)次數(shù)
var delay = 10; // 開始延時(shí)
component.schedule(function() {
? ? this.doSomething(); // 這里的 this 指向 component
}, interval, repeat, delay);
【3】scheduleOnce定時(shí)執(zhí)行一次(快捷方式)
例如:某個(gè)任務(wù)需要在兩秒后執(zhí)行一次回調(diào)函數(shù),之后就停止。
component.scheduleOnce(function() {
? ? this.doSomething(); // 這里的 this 指向 component
}, 2);
【4】unschedule取消計(jì)時(shí)器
當(dāng)使用了周期執(zhí)行的定時(shí)任務(wù)后,之后又需要在特定的情況下取消定時(shí)任務(wù),可以采用回調(diào)函數(shù)本身來取消計(jì)時(shí)器。
this.count = 0;
this.callback = function () {
? ? if (this.count === 5) {
? ? ? ? // 在第六次執(zhí)行回調(diào)時(shí)取消這個(gè)計(jì)時(shí)器
this.unschedule(this.callback);
? ? }
? ? this.doSomething();
? ? this.count++;
}
component.schedule(this.callback, 1);
【總結(jié)】 Component 中所有關(guān)于計(jì)時(shí)器的函數(shù):
schedule 調(diào)度一個(gè)自定義的回調(diào)函數(shù)。
scheduleOnce 調(diào)度一個(gè)只運(yùn)行一次的回調(diào)函數(shù),可以指定 0 讓回調(diào)函數(shù)在下一幀立即執(zhí)行或者在一定的延時(shí)之后執(zhí)行。
unschedule 取消調(diào)度一個(gè)自定義的回調(diào)函數(shù)。
unscheduleAllCallbacks 取消調(diào)度所有已調(diào)度的回調(diào)函數(shù):定制的回調(diào)函數(shù)以及 'update' 回調(diào)函數(shù)。
這些 API 的詳細(xì)描述都可以在 Component API 文檔中找到。如下:




除此之外,如果需要每一幀都執(zhí)行一個(gè)函數(shù),請(qǐng)直接在 Component 中添加 update 函數(shù),這個(gè)函數(shù)將默認(rèn)被每幀調(diào)用,這在生命周期文檔中有詳細(xì)描述。另外需要注意:cc.Node 不包含計(jì)時(shí)器相關(guān) API。
關(guān)于定時(shí)任務(wù)的分享就到這里,更多課程咨詢請(qǐng)點(diǎn)擊下方鏈接或添加筆者主頁群聊:
https://bycwedu.vipwan.cn/promotion_channels/630597732