Cocos2d-x三种定时器的使用schedule,scheduleUpdate,scheduleOnce
首先,什么是定时器呢?或许有时候我们想没个一定的时间周期性地在屏幕上生成一个精灵,或者周期性地检验物体间的碰撞。当我们想周期性地(一次或者多次)去执行某个方法或某段程序时,就可以交给定时器来解决。
Cocos2d-x中有三种定时器,分别是schedule,scheduleUpdate,scheduleOnce。有了定时器,我们就可以很方便地实现以上的功能,想想是不是还有些小激动呢。今天就主要学习这三种定时器的用法:
1.schedule
通过该方法,程序可以每隔设定的秒数内周期性地调用指定的方法(方法名自定义)。
首先还是在HelloWorld头文件中声明所要执行的函数:
void Move(float dt);
注意方法的参数格式!
然后在源文件实现:
void HelloWorld::Move(float dt) { CCLOG("hello hello"); }
在需要启动改定时器的地方调用scheduleUpdate以开启该定时器:this->schedule(schedule_selector(HelloWorld::Move), 1.0f); //每隔1.0f执行一次,省略参数则表示每帧都要执行
运行程序你就可以看到每隔1.0秒控制台中有“hello hello"被输出。
2.scheduleUpdate
功能描述:每帧都执行一次Update方法
加入当前节点后,程序会每帧都会自动执行一次默认的Update函数。(注:一定是Update函数哦,若想调用其他自己命名的函数则使用schedule)
看例子,走起。
首先在HelloWord类的头文件中声明Update函数:
void Update(float dt); //注意参数类型
然后在HelloWorld类源文件中实现函数Update:
void HelloWorld::Update(float dt) { CCLOG("hello hello"); }
在需要启动改定时器的地方调用scheduleUpdate以开启该定时器:this->scheduleUpdate();
运行程序你就可以看到控制台中不断地有“hello hello"被输出。
3.scheduleOnce
功能描述:在几秒之后执行指定方法,并且只会执行一次。
我们就执行上面所写的Move函数吧。
this->scheduleOnce(schedule_selector(HelloWorld::Move), 1.0f); //在1.0f之后执行,并且只执行一次。
运行一下,“hello hello”只是被打印了一次就完了……
ok,定时器的调用已经讲完了,大家不妨自己写一些函数体验一下,自己动手,丰衣足食。
4.停止定时器
1、停止执行自己定义的函数定时器:
this->unschedule(schedule_selector(HelloWorld::Move));
2、停止默认定时器:
this->unscheduleUpdate();
3、停止所有定时器:this->unscheduleAllSelectors();