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;


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

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);
}


我們再到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



我們來看看效果:



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

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

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

好了, 進的就到這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章