天天看點

Cocos2d-x三種定時器的使用schedule,scheduleUpdate,scheduleOnce

Cocos2d-x三種定時器的使用schedule,scheduleUpdate,scheduleOnce

首先,什麼是定時器呢?或許有時候我們想沒個一定的時間周期性地在螢幕上生成一個精靈,或者周期性地檢驗物體間的碰撞。當我們想周期性地(一次或者多次)去執行某個方法或某段程式時,就可以交給定時器來解決。

Cocos2d-x中有三種定時器,分别是schedule,scheduleUpdate,scheduleOnce。有了定時器,我們就可以很友善地實作以上的功能,想想是不是還有些小激動呢。今天就主要學習這三種定時器的用法:

1.schedule

通過該方法,程式可以每隔設定的秒數内周期性地調用指定的方法(方法名自定義)。

首先還是在HelloWorld頭檔案中聲明所要執行的函數:

void Move(float dt);  
           

注意方法的參數格式!

然後在源檔案實作:

void HelloWorld::Move(float dt)  
{  
    CCLOG("hello hello");  
} 
           
在需要啟動改定時器的地方調用scheduleUpdate以開啟該定時器:
this->schedule(schedule_selector(HelloWorld::Move), 1.0f); 
//每隔1.0f執行一次,省略參數則表示每幀都要執行 
           

運作程式你就可以看到每隔1.0秒控制台中有“hello hello"被輸出。

2.scheduleUpdate

功能描述:每幀都執行一次Update方法

加入目前節點後,程式會每幀都會自動執行一次預設的Update函數。(注:一定是Update函數哦,若想調用其他自己命名的函數則使用schedule)

看例子,走起。

首先在HelloWord類的頭檔案中聲明Update函數:

void Update(float dt);   //注意參數類型 
           
然後在HelloWorld類源檔案中實作函數Update:
void HelloWorld::Update(float dt)  
{  
    CCLOG("hello hello");  
} 
           
在需要啟動改定時器的地方調用scheduleUpdate以開啟該定時器:
this->scheduleUpdate();
           

運作程式你就可以看到控制台中不斷地有“hello hello"被輸出。

3.scheduleOnce

功能描述:在幾秒之後執行指定方法,并且隻會執行一次。

我們就執行上面所寫的Move函數吧。

this->scheduleOnce(schedule_selector(HelloWorld::Move), 1.0f); //在1.0f之後執行,并且隻執行一次。 
           

運作一下,“hello hello”隻是被列印了一次就完了……

ok,定時器的調用已經講完了,大家不妨自己寫一些函數體驗一下,自己動手,豐衣足食。

4.停止定時器

1、停止執行自己定義的函數定時器:

this->unschedule(schedule_selector(HelloWorld::Move));  
           
2、停止預設定時器:
this->unscheduleUpdate();  
           
3、停止所有定時器:
this->unscheduleAllSelectors();