cocos2dx中有三種定時器:schedule,scheduleUpdate,scheduleOnce。
1、scheduleUpdate
加入當前節點後,程序會每幀都會自動執行一次默認的Update函數。(注:一定是Update函數哦,若想調用其他自己命名的函數則使用schedule)
看例子,走起。
首先在HelloWord類的頭文件中聲明Update函數:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
void Update(float dt); //注意參數類型
然後在HelloWorld類源文件中實現函數Update:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
void HelloWorld::Update(float dt)
{
CCLOG("baibai");
}
現在我們可以調用了,在需要他不斷執行的地方加入調用的代碼就ok:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
this->scheduleUpdate(); //this是當前節點,如layer,所以可以省略啦。
運行之後你將會看到不斷有baibai被打印出來
2、scheduleUpdate
可以沒隔幾秒執行某個自定義的函數,來看代碼:
首先還是在HelloWorld中聲明所要執行的函數:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
void Move(float dt);
然後在源文件實現:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
void HelloWorld::Move(float dt)
{
CCLOG("baibai");
}
現在去執行他,注意參數哦
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
scheduleOnce(schedule_selector(HelloWorld::Move), 1.0f); //每隔1.0f執行一次,省略參數則表示每幀都要執行
運行之後,baibai每隔1.0f纔會被打印一次。
3、scheduleOnce
功能:在幾秒之後執行,並且只會執行一次。
我們就執行上面所寫的Move函數吧。
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
this->scheduleOnce(schedule_selector(HelloWorld::Move), 1.0f); //在1.0f之後執行,並且只執行一次。
運行一下,baibai只是被打印了一次就完了。。。
ok,定時器的調用已經講完了,大家不妨自己寫一些函數體驗一下。
但是怎麼停止定時器呢?
1、停止執行自己定義的函數定時器:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
this->unschedule(schedule_selector(HelloWorld::Move));
2、停止默認定時器:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
this->unscheduleUpdate();
3、停止所有定時器:
[cpp] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
this->unscheduleAllSelectors();