cocos2d-x 3.x之定时器
2014-12-03 23:04
239 查看
cocos2d-x为我们提供了两种方式来实现定时机制——使用update方法以及实用scheduleUpdate方法。
1.update定时器
第一种定时机制是Node类的刷新事件update方法,该方法在每帧绘制之前都会被触发一次。由于绘图帧率有限,而每次更新最终会反映到画面上,所以在每帧之间刷新一次已经足够应付大部分游戏逻辑处理的要求了。
cocos2d-x默认没有启用update事件,为了启用定时器,我们需要调用scheduleUpdate方法并重载update以执行自己的代码。对应的,我们可以使用unscheduleUpdate方法停止定时器。
以引擎的HelloWorld为例来使用定时器,首先在HelloWorld.h头文件中重载update方法
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方法
myUpdate 3.000514
myUpdate 3.002915
myUpdate 3.000579
myUpdate 3.000229
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
相关文章推荐
- Cocos2d-3.x_定时器
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(2)
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(1)
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(2)
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(1)
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(3)
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(3)
- Cocos2d-x 3.x基础总结 -- 定时器更新schedule/update
- Cocos2d-x 3.x lua中的定时器
- Cocos2d-x 3.X里的坑(1)——标签菜单项MenuItemLabel和精灵菜单项MenuItemSprite回调不响应
- Cocos2d-3.x_菜单项和菜单的使用
- Cocos2d-x-3.x 从零开始之 创建新项目
- Cocos2D-X开发学习笔记2:定时器
- Cocos2d-x_定时器(更新函数)
- Cocos2d-x 3.x 全平台(Android,iOS)新手开发配置教程攻略
- 【cocos2d-x 3.x 学习与应用总结】2: 在cocos2d-x中使用ccbi
- Cocos2d-x 3.x 图形学渲染系列七
- Cocos2d-x 3.x中解决无法打开文件:“extensions/ExtensionMacros.h”
- Cocos2d-x 3.x 图形学渲染系列十八
- 关于cocos2d-x 2.x与3.x之间的区别