cocos2d-x核心类剖析-cocos2d-x定时器机制
2015-06-21 23:05
435 查看
问题1:定时器回调函数,添加到cocos2d-x框架哪里去了。
问题2:定时器回调函数是如何被cocos2d-x回调用起来的
问题3:cocos2d-x框架式如何管理定时器的。
问题2:定时器回调函数是如何被cocos2d-x回调用起来的
问题3:cocos2d-x框架式如何管理定时器的。
定时器的应用基础cocos2d-x |
Cocos2d-x提供两种定时器 1)update定时器,每帧被调用,使用scheduleUpdate方法启用。 2)schedule定时器,可设置时间间隔来触发,使用schedule方法启用。 框架与应用界面接口如下: void scheduleUpdate(void); void unscheduleUpdate(void); void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay); void schedule(SEL_SCHEDULE selector, float interval); void scheduleOnce(SEL_SCHEDULE selector, float delay); void schedule(SEL_SCHEDULE selector); void unschedule(SEL_SCHEDULE selector); void unscheduleAllSelectors(void); |
问题1:定时器回调函数,添加到cocos2d-x框架哪里去了? 1) CCNode类注入了调度器对象; 2) 通过schedule()函数,上层应用对象及对象的回调函数入口地址,被添加到调度器CCScheduler中。 3) 调度器为每一个定时器设置CCTimer对象,并保存定时器类目标、回调函数、触发周期,重复次数;在把对应信息保存到m_pHashForTimers链表中。以便后续调度。 代码如下: |
问题2:定时器回调函数是如何被调用起来的 顺序如下: 1)AppDelegate对象run函数,按照帧频率调用 void CCDisplayLinkDirector::mainLoop(void) 2)mainLoop 函数调用,void CCDirector::drawScene(void) 4) 调度器的update函数发起如下调度 同时,如果在调度过程中,有删除定时器操作时,在调度完毕以后再删除。 删掉定时器,只做标记。 结论1:普通定时器调用顺序:1、系统的事件驱动游戏主循环;2、游戏主循环调用CCScheduler的update方法。3、CCScheduler调用普通定时器对应的CCTimeer对象的update方法;4、CCTime类的updata方法调用定时器对应的回调函数。 结论2:updata定时器,调用顺序比较简单,直接在CCScheduler的update方法中调用。 |
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 插件管理框架 for Delphi(一)
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 使用CSS框架布局的缺点和优点小结
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例