天天看點

cocos2dX 事件schedule

今天, 我們來看看cocos2dX裡面的定時器, 關于定時器這個概念大家應該很是熟悉吧, 所謂的定時器其實到了一個時間我們就幹什麼事, (旁白: 這還用你說), 在cocos2dX裡面定時器的作用就是每隔一段時間調用一次函數, schedule就是cocos2dX裡面的定時器, 老規矩, 還是來熟悉一下函數

scheduleUpdate 每幀執行update

schedule( "目标函數"); 每幀執行目标函數

schedule( "目标函數", "時間"); 每隔指定時間執行目标函數

schedule( "目标函數", "時間", "次數", "等待時間");

scheduleOnce( "目标函數", "等待時間"); 多久之後執行一次目标函數, 隻執行一次

首先, 我們在頭檔案裡面建立幾個回調函數:

void update( float delta);
	void sch2( float delta);
	void schonce( float delta);
           

并且建立兩個計數的變量:

int a;
	int b;
	int c;
           
cocos2dX 事件schedule

然後我們初始化計數變量, 并且實作這幾個函數(函數的功能很簡單, 就是每調用一次, 就給對應的計數變量加一):

HelloWorld::HelloWorld()
{
<span style="white-space:pre">	</span>a = 0;
<span style="white-space:pre">	</span>b = 0;
<span style="white-space:pre">	</span>c = 0;
}


void HelloWorld::update( float delta)
{
<span style="white-space:pre">	</span>a += 1;
<span style="white-space:pre">	</span>char buff[50] = { 0};
<span style="white-space:pre">	</span>std::sprintf( buff, "update:%d", a);
<span style="white-space:pre">	</span>CCLabelTTF* label = ( CCLabelTTF*)this->getChildByTag( 101);<span style="white-space:pre">		</span>//通過我們設定的标簽取得對象, 并且強轉為CCLabelTTF
<span style="white-space:pre">	</span>label->setString( buff);<span style="white-space:pre">											</span>//設定字元串
}


void HelloWorld::sch2( float delta)
{
<span style="white-space:pre">	</span>b += 1;
<span style="white-space:pre">	</span>char buff[50] = { 0};
<span style="white-space:pre">	</span>std::sprintf( buff, "sch2:%d", b);
<span style="white-space:pre">	</span>CCLabelTTF* label = ( CCLabelTTF*)this->getChildByTag( 102);
<span style="white-space:pre">	</span>label->setString( buff);
}
void HelloWorld::schonce( float delta)
{


<span style="white-space:pre">	</span>c += 1;
<span style="white-space:pre">	</span>char buff[50] = { 0};
<span style="white-space:pre">	</span>std::sprintf( buff, "schOnce:%d", c);
<span style="white-space:pre">	</span>CCLabelTTF* label = ( CCLabelTTF*)this->getChildByTag( 103);
<span style="white-space:pre">	</span>label->setString( buff);
}
           
cocos2dX 事件schedule

我們再到init裡面建立三個标簽, 并且用三種不同的方式調用這三個函數:

CCLabelTTF* label1 = CCLabelTTF::create( "", "Arial", 24);							//建立三個字元串
	label1->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2 + 100));
	addChild( label1, 0, 101);
	CCLabelTTF* label2 = CCLabelTTF::create( "", "Arial", 24);
	label2->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
	addChild( label2, 0, 102);
	CCLabelTTF* label3 = CCLabelTTF::create( "", "Arial", 24);
	label3->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2 - 100));
	addChild( label3, 0, 103);

	scheduleUpdate();																	//每一幀調用一次update
	schedule( schedule_selector( HelloWorld::sch2), 1.0f);								//每隔一秒調用一次sch2
	scheduleOnce( schedule_selector( HelloWorld::schonce), 3.0f);						//三秒之後調用schonce
           
cocos2dX 事件schedule

我們來看看效果:

cocos2dX 事件schedule
cocos2dX 事件schedule

看看, 是不是每一幀都調用了一次update, 每一秒都調用了一次sch2, 隻調用了一次schonce, 挺簡單的吧, 不用另開線程了吧( 旁白:  是挺簡單的)

當然, 還可以使用UnSchedule讓定時器停下來, 我就不做詳細解釋了, 還是那一句話, 多去看看官方的API

記住, 遊戲的速度再快, 我們都能處理到每一幀

好了, 進的就到這裡

繼續閱讀