实现 Cocos2d-x 全局定时器
来源:互联网 发布:莱特币挖矿软件cgmin 编辑:程序博客网 时间:2024/05/06 12:17
cocos2d-x 中有自己的定时器实现,一般用法是在场景,层等内部实现,定时器的生命周期随着它们的消亡而消亡,就运行周期而言,相对最长的是场景,如果在多个场景切换并且保持定时器的运行,那我们就需要定义一个自己的 全局定时器。
平时所使用的定时器,我们可以直接使用,是因为 CCNode 帮我们实现了定时器的封装,一个简单的做法,是定义个全局的静态 CCNode 对象,在程序运行之初初始化,并执行其定时器任务,而不由任何场景所管理即可实现,但在这里,一叶对定时器的内部实现稍作了解后,封装了自己实现的全局定时解决方案,代码如下:
- ////////////////////
- // GlobalSchedule.h
- ////////////////////
- #ifndef GLOBALSCHEDULE_H_
- #define GLOBALSCHEDULE_H_
- #include"cocos2d.h"
- USING_NS_CC;
- /**
- * 全局定时器
- */
- classGlobalSchedule:publicCCObject{
- public:
- // 开始全局定时器 fInterval: 时间间隔 ; fDelay: 延迟运行
- staticvoid start(float fInterval =0.0f,float fDelay =0.0f);
- // 停止全局定时器
- staticvoid stop();
- // 全局定时器暂停
- staticvoid pause();
- // 全局定时器暂停恢复
- staticvoid resume();
- // 全局定时器主逻辑实现
- void globalUpdate();
- private:
- // 构造函数私有化,只能通过 start 来启用全局定时器
- GlobalSchedule(float fInterval,float fDelay);
- ~GlobalSchedule();
- // 静态变量保持单例
- staticGlobalSchedule* m_pSchedule;
- };
- #endif/* GLOBALSCHEDULE_H_ */
- /////////////////////
- // GlobalSchedule.cpp
- /////////////////////
- #include"GlobalSchedule.h"
- #define SCHEDULE CCDirector::sharedDirector()->getScheduler()
- GlobalSchedule*GlobalSchedule::m_pSchedule= NULL;
- GlobalSchedule::GlobalSchedule(float fInterval,float fDelay){
- CCLog("GlobalSchedule()");
- CCAssert(!m_pSchedule,"以定义,不能重复定义");
- SCHEDULE->scheduleSelector(
- schedule_selector(GlobalSchedule::globalUpdate),this, fInterval,
- false,
- kCCRepeatForever, fDelay);
- m_pSchedule=this;
- }
- GlobalSchedule::~GlobalSchedule(){
- CCLog("GlobalSchedule().~()");
- SCHEDULE->unscheduleSelector(
- schedule_selector(GlobalSchedule::globalUpdate),this);
- }
- voidGlobalSchedule::globalUpdate(){
- // 这里写全局定时器的逻辑处理代码
- CCLog("global update");
- }
- voidGlobalSchedule::start(float fInterval,float fDelay){
- newGlobalSchedule(fInterval, fDelay);
- }
- voidGlobalSchedule::stop(){
- CCLog("GlobalSchedule().clean()");
- CCAssert(m_pSchedule,"未定义");
- CC_SAFE_DELETE(m_pSchedule);
- }
- voidGlobalSchedule::pause(){
- CCLog("GlobalSchedule().pause()");
- CCAssert(m_pSchedule,"为定义");
- SCHEDULE->pauseTarget(m_pSchedule);
- }
- voidGlobalSchedule::resume(){
- CCLog("GlobalSchedule().resume()");
- CCAssert(m_pSchedule," 未定义");
- SCHEDULE->resumeTarget(m_pSchedule);
- }
使用方法
这样的封装,在使用的时候只要填写 globalUpdate() 方法,处理具体的逻辑,然后在 AppDelegate 的applicationDidFinishLaunching 调用如下代码:
- // 启动定时器
- GlobalSchedule::start();
- // 启动定时器,每 0.2 秒间隔执行
- GlobalSchedule::start(0.2f);
- // 每 0.5 秒间隔运行,延迟 3 秒启动
- GlobalSchedule::start(0.5f, 3.0f);
注意,start() 不论调用哪个重载的方法, 只能调用一次。当然可以在调用 stop() 方法重新调用 start() 启动定时器,方法的重载实现了定时器的时间间隔和延迟运行,并实现了定时器的暂停和恢复功能。
什么时候结束
推荐的结束时机为在最后一个场景结束之时:
- CCDirector::sharedDirector()->end();
- GlobalSchedule::stop();
原文地址:http://blog.leafsoar.com/archives/2013/05-08-21.html
- 实现 Cocos2d-x 全局定时器
- 实现 Cocos2d-x 全局定时器
- 实现 Cocos2d-x 全局定时器
- Cocos2d-x 3.10全局定时器简便实现
- COCOS2D-X全局定时器
- Cocos2d-x利用schedule实现定时器
- Cocos2d-x实现计时器与定时器功能
- cocos2d-x schedule 定时器
- cocos2d-x 定时器 schedule
- cocos2d-x 定时器 schedule
- cocos2d-x schedule 定时器
- cocos2d-x定时器
- cocos2d-x schedule 定时器
- cocos2d-x的定时器
- cocos2d-x 定时器schedule
- cocos2d-x lua 定时器
- cocos2d-x定时器
- Cocos2d-x-------------------------定时器schedule
- int* pInt = new int(5)和int* pInt = new int[5]的区别
- 数据库集群-技术学习总结
- 拷贝构造函数的参数类型必须是引用(转)
- Android C 程序编译与调试
- 零零散散学算法之再叙字符串匹配
- 实现 Cocos2d-x 全局定时器
- 文件下载功能相关的FireFox和IE的差异问题
- #pragma once 和#ifndef ... #define ... #endif 比较
- XListBox-自画条目背景和文字颜色的listbox控件
- Linux 网络IPC 之套接字
- android新浪微博开发Sso登录
- MySQL的一些语句(9)-运算符
- HTC手机手动解锁教程
- RenderStream 智能连接Filter