cocos2d-x核心类剖析-cocos2d-x定时器机制

12 篇文章 0 订阅

问题1:定时器回调函数,添加到cocos2d-x框架哪里去了。

问题2:定时器回调函数是如何被cocos2d-x回调用起来的

问题3cocos2d-x框架式如何管理定时器的。

 

定时器的应用基础cocos2d-x 

Cocos2d-x提供两种定时器 

1update定时器,每帧被调用,使用scheduleUpdate方法启用。

2schedule定时器,可设置时间间隔来触发,使用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:定时器回调函数是如何被调用起来的

顺序如下:

1AppDelegate对象run函数,按照帧频率调用 void CCDisplayLinkDirector::mainLoop(void)

 

 

2mainLoop 函数调用,void CCDirector::drawScene(void)

 

 

4) 调度器的update函数发起如下调度

 

同时,如果在调度过程中,有删除定时器操作时,在调度完毕以后再删除。

删掉定时器,只做标记。

 

结论1:普通定时器调用顺序:1、系统的事件驱动游戏主循环;2、游戏主循环调用CCSchedulerupdate方法。3CCScheduler调用普通定时器对应的CCTimeer对象的update方法;4CCTime类的updata方法调用定时器对应的回调函数。

结论2updata定时器,调用顺序比较简单,直接在CCSchedulerupdate方法中调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值