大部分游戏中定时器是不可或缺的,因为即每隔一段时间,就要执行相应的刷新体函数,以更新游戏的画面、时间、进度、敌人的指令等等。
Cocos2d-x为我们提供了定时器schedule相关的操作。其操作函数的定义在CCNode中,所以基本上大多数的引擎类都可以设置定时器,如CCLayer、CCSprite、CCMenu等。
定时器更新的方式分为三类:
(1)默认定时器 :scheduleUpdate();
(2)自定义定时器:schedule();
(3)一次性定时器:scheduleOnce();
定时器schedule、update
scheduleUpdate
默认定时器:scheduleUpdate()。
该定时器默认刷新次数与屏幕刷新频率有关。如频率为60帧每秒,那么scheduleUpdate每秒执行60次刷新。
与scheduleUpdate其对应的刷新函数体为update(),即每一帧会执行一次update()函数。
相关操作如下:
void scheduleUpdate();//开启默认定时器。刷新间隔为一帧。
void scheduleUpdateWithPriority(int priority); //给予优先级priority。priority越小,优先级越高
virtual void update(float delta); //update为scheduleUpdate定时器的刷新函数体.
schedule
自定义定时器:schedule()。
该定时器可以自定义指定的刷新函数体、刷新函数体的次数、刷新频率、以及开始刷新的时间。
函数体不一定为update(),可以自己定义。
相关操作如下:
//设置自定义定时器。默认刷新间隔为一帧。其有多个重载,相关参数意义如下
interval : 每隔interval秒,执行一次。
repeat : 重复次数。
delay : 延迟时间,即创建定时器delay秒后开始执行刷新。
schedule( schedule_selector(HelloWorld::myUpdate), 1.0/60.0 );
void schedule(SEL_SCHEDULE selector); //默认刷新间隔为一帧
void schedule(SEL_SCHEDULE selector, float interval); //自定义刷新间隔,单位:秒
void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);
scheduleOnce
一次性定时器:scheduleOnce()。
该定时器在等待delay秒延迟时间后,只执行一次刷新函数体,之后就不再刷新。
相关操作如下:
只执行一次,delay秒后执行
scheduleOnce( schedule_selector(HelloWorld::myUpdate), 5.0 );
void scheduleOnce(SEL_SCHEDULE selector, float delay);
定时器的取消、暂停、恢复。
相关操作如下:
this->unscheduleUpdate();
sprite->unscheduleAllSelectors();
void unscheduleUpdate(void); //取消默认定时器
void unschedule(SEL_SCHEDULE selector); //取消自定义函数的定时器
void unscheduleAllSelectors(void); //取消所有定时器
void pauseSchedulerAndActions(void); //暂停所有定时器和动作
void resumeSchedulerAndActions(void); //恢复所有定时器和动作
分析与总结
scheduleUpdate()和schedule(schedule_selector)的效果一样,只是schedule可以自定义刷新函数体,不一定是update()。而scheduleUpdate()的刷新函数体只能为update()。