Cocos2d-x三種定時器的使用schedule,scheduleUpdate,scheduleOnce
首先,什麼是定時器呢?或許有時候我們想沒個一定的時間周期性地在螢幕上生成一個精靈,或者周期性地檢驗物體間的碰撞。當我們想周期性地(一次或者多次)去執行某個方法或某段程式時,就可以交給定時器來解決。
Cocos2d-x中有三種定時器,分别是schedule,scheduleUpdate,scheduleOnce。有了定時器,我們就可以很友善地實作以上的功能,想想是不是還有些小激動呢。今天就主要學習這三種定時器的用法:
1.schedule
通過該方法,程式可以每隔設定的秒數内周期性地調用指定的方法(方法名自定義)。
首先還是在HelloWorld頭檔案中聲明所要執行的函數:
void Move(float dt);
注意方法的參數格式!
然後在源檔案實作:
在需要啟動改定時器的地方調用scheduleUpdate以開啟該定時器:void HelloWorld::Move(float dt) { CCLOG("hello hello"); }
this->schedule(schedule_selector(HelloWorld::Move), 1.0f); //每隔1.0f執行一次,省略參數則表示每幀都要執行
運作程式你就可以看到每隔1.0秒控制台中有“hello hello"被輸出。
2.scheduleUpdate
功能描述:每幀都執行一次Update方法
加入目前節點後,程式會每幀都會自動執行一次預設的Update函數。(注:一定是Update函數哦,若想調用其他自己命名的函數則使用schedule)
看例子,走起。
首先在HelloWord類的頭檔案中聲明Update函數:
然後在HelloWorld類源檔案中實作函數Update:void Update(float dt); //注意參數類型
在需要啟動改定時器的地方調用scheduleUpdate以開啟該定時器:void HelloWorld::Update(float dt) { CCLOG("hello hello"); }
this->scheduleUpdate();
運作程式你就可以看到控制台中不斷地有“hello hello"被輸出。
3.scheduleOnce
功能描述:在幾秒之後執行指定方法,并且隻會執行一次。
我們就執行上面所寫的Move函數吧。
this->scheduleOnce(schedule_selector(HelloWorld::Move), 1.0f); //在1.0f之後執行,并且隻執行一次。
運作一下,“hello hello”隻是被列印了一次就完了……
ok,定時器的調用已經講完了,大家不妨自己寫一些函數體驗一下,自己動手,豐衣足食。
4.停止定時器
1、停止執行自己定義的函數定時器:
2、停止預設定時器:this->unschedule(schedule_selector(HelloWorld::Move));
3、停止所有定時器:this->unscheduleUpdate();
this->unscheduleAllSelectors();