cocos2d-x 真正的定时器之schedule

在游戏设计时,我们需要不断的改变屏幕显示来反映游戏操作的效果,最简单的就是提示用户已经进行的游戏时间。为此,我们需要使用cocos2d-x内置的任务调度机制,即CCNode的schedule成员函数。 

void  schedule (SEL_SCHEDULE selector)
  schedules a selector. 
void  schedule (SEL_SCHEDULE selector, ccTime interval)
  schedules a custom selector with an interval time in seconds. 
void  unschedule (SEL_SCHEDULE selector)
  unschedules a custom selector. 
void  unscheduleAllSelectors (void)
  unschedule all scheduled selectors: custom selectors, and the 'update' selector. 
cocos2d-x中的schedule有两种作用:

1)定时执行方法
 例如,每隔1秒就执行GameLayer类的方法step(ccTime dt)。

this->schedule(schedule_selector(GameLayer::step), 1.0f);
...
void GameLayer::step(ccTime dt)
{
...
}
2)延时执行方法
 例如, 延时 5秒执行GameLayer类的方法step(ccTime dt)。

this->schedule(schedule_selector(GameLayer::step), 5.0f);
...
void GameLayer::step(ccTime dt)
{
this-> unschedule(schedule_selector( GameLayer::step  )); // 去除定时器, 这样该方法也就执行一次
...
}


1. 不调用update函数,调用自己的函数

其实原理是一样的,我们调用scheduleUpdate的时候,系统默认每帧去调用update函数,但如果我们想调用自己的函数呢?很简单,先给HelloWorldScene添加一个函数:

[cpp]  view plain copy print ?
 
  1. private:  
  2.     /* 自定义的update函数 */  
  3.     void MutUpdate(float fDelta);  


 

同样在函数里打日志:

[cpp]  view plain copy print ?
 
  1. void HelloWorld::MutUpdate( float fDelta )  
  2. {  
  3.     CCLOG("MutUpdate");  
  4. }  


 

然后我们要添加一句很暴力的代码:

[cpp]  view plain copy print ?
 
  1. bool HelloWorld::init()  
  2. {  
  3.     bool bRet = false;  
  4.     do   
  5.     {  
  6.         CC_BREAK_IF(! CCLayer::init());  
  7.   
  8.         //this->scheduleUpdate();  
  9.   
  10.         /* 指定每帧执行自定义的函数 */  
  11.         this->schedule(schedule_selector(HelloWorld::MutUpdate));  
  12.         bRet = true;  
  13.     } while (0);  
  14.   
  15.     return bRet;  
  16. }  


 

我们使用schedule指定了一个自定义的函数,然后我们用调试模式运行项目,将看到以下输出:

MutUpdate

MutUpdate

MutUpdate

MutUpdate

MutUpdate

MutUpdate

MutUpdate

MutUpdate

我想,没有什么可以解释的,就是指定了一个回调函数。

(小若:其实他不懂。)

 

2. 真正的定时

好喇,我们要真正创建一个定时器了,我们修改一下schedule的参数就可以了:

[java]  view plain copy print ?
 
  1. this->schedule(schedule_selector(HelloWorld::MutUpdate), 1.0f);  


 

第二个参数的意思是,每隔多少秒执行一次MutUpdate函数,记住,单位是秒。

你可能感兴趣的:(cocos2d-x 真正的定时器之schedule)