cocos2d-x 3.x之定时器

cocos2d-x为我们提供了两种方式来实现定时机制——使用update方法以及实用scheduleUpdate方法。

1.update定时器
第一种定时机制是Node类的刷新事件update方法,该方法在每帧绘制之前都会被触发一次。由于绘图帧率有限,而每次更新最终会反映到画面上,所以在每帧之间刷新一次已经足够应付大部分游戏逻辑处理的要求了。
cocos2d-x默认没有启用update事件,为了启用定时器,我们需要调用scheduleUpdate方法并重载update以执行自己的代码。对应的,我们可以使用unscheduleUpdate方法停止定时器。

以引擎的HelloWorld为例来使用定时器,首先在HelloWorld.h头文件中重载update方法

class HelloWorld : public Layer
{
public:
	virtual void update(float delta) // delta参数代表上一次调用这个函数到本次调用这个函数之间间隔多少秒
	{
		CCLOG("update %f", delta);
		// this->unscheduleUpdate(); 停止update定时器
	}
};
我们在HelloWorld层的init方法中启用定时器
bool HelloWorld::init()
{
	if(!Layer::init())
	{
		return false;
	}
	
	this->scheduleUpdate(); // 启用update定时器,每帧绘制之前都会调用update
	
	return true;
}
控制台下在不停的打印
update 0.028961
update 0.016667
update 0.016667
update 0.016667
update 0.016666


2.schedule定时器
另一种定时机制是Node类的schedule方法,可以实现以一定的时间间隔连续调用某个函数。由于引擎的调度机制,这里的时间间隔必须大于两帧的间隔,否则两帧期间的多次调用会被合并成一次调用,一般来说,事件间隔应在0.1秒以上。

同样以HelloWorld为例来启用定时器,在HelloWorld.h头文件中加上myUpdate方法

class HelloWorld : public Layer
{
public:
	void myUpdate(float delta) // delta参数代表上一次调用这个函数到本次调用这个函数之间间隔多少秒
	{
		CCLOG("myUpdate %f", delta);
		// this->unschedule(schedule_selector(HelloWorld::myUpdate)); 停止schedule定时器
		// this->unscheduleAllSelectors(); 停止所有的定时器
	}
};
在HelloWorld层的init方法中启用定时器
bool HelloWorld::init()
{
	if(!Layer::init())
	{
		return false;
	}
	
	// schedule_selector是一个用来把指定函数转化成函数指针的宏,用来启动一个自定义的定时器,第二个参数表示以秒为单位的时间,0代表以每帧为时间间隔,每3秒调用myUpdate方法
	this->schedule(schedule_selector(HelloWorld::myUpdate), 3);
	
	return true;
}
控制台打印结果:
myUpdate 3.000514
myUpdate 3.002915
myUpdate 3.000579
myUpdate 3.000229
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值