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

相关文章

操作步骤 1、创建cocos2d-x工程 2、新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#defi...
开发环境:OS(WINDOWS 8.1 X64 企业版) cocos2d-x 2.2.1 vs2010 想给vs安装上cocos的模版,执行Install...
把创建项目做成一个批处理,当创建项目时可以省时省力很多。 操作步骤 1、在 E:cocos2d-x-2.2.1toolspr...
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evC...
转载于 http://www.cnblogs.com/kenkofox/p/3926797.html 熟悉js的dom事件或者flash事件的,基本都能立...
ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况。最近项...