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

记住, 游戏的速度再快, 我们都能处理到每一帧

好了, 进的就到这里

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