天天看点

Cocos2d-x三种定时器的使用schedule,scheduleUpdate,scheduleOnce

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