cocos2d-x核心类剖析-CCDirector类

问题2-1CCDirector类是什么时候创建?

问题2-2cocos2d-x应用窗口的消息回调函数是如何和CCDirector类创建连接起来的?


创建AppDelegate对象后,全局唯一AppDelegate对象会执行run函数进行消息循环处理;创建CCEGLView对象后,该全局唯一CCEGLVie对象会处理win消息回调,也就是LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)。若不懂请回看第一节。

2、创建窗口对象后,第一次激活窗口显示的时,CCEGLView::WindowProc函数会做相应处理,关键代码就是444行:


CCApplication::sharedApplication()->applicationWillEnterForeground();

典型分析如下:

1444行这块代码是典型的多态,用父类指针执行子类对象。

2)没有C++基础的同学,请思考,多态实现的三个条件,不管是C还是Java都一样。

1有继承,2要虚函数重写,3父类指针指向子类对象),

3)多态的结果就是,从父类CCApplication,去执行子类AppDelegate::applicationWillEnterForeground()函数。

4AppDelegate::applicationWillEnterForeground()函数会执行,CCDirector::sharedDirector()->startAnimation();就会被调用。

 

5CCDirector::sharedDirector()就是这句话,第一次调用,开始产生CCDirector类的对象。

我们再看该函数内做了什么。

 

注意一点细节的是,创建CCDisplayLinkDirector类对象,继承关系如下:

class CCDisplayLinkDirector : public CCDirector。其中CCDisplayLinkDirector类重写了以下几个方法

    virtual void mainLoop(void);

    virtual void setAnimationInterval(double dValue);

    virtual void startAnimation(void);

    virtual void stopAnimation()。

6)我们再看s_SharedDirector->init()函数做了什么。

 

狐狸的尾巴终于露出来了。就是在这个在bool CCDirector::init(void)函数里面,cocos2d-x框架初始化了各种各样的器件。王保明bombing提醒你,一种典型的组合设计方法清晰可见、敬佩之情悠然而生。

在这里你仔细看看吧。最值得你看的地方。

// scheduler cocos2d-x中的调度器

m_pScheduler = new CCScheduler();

// action manager cocos2d-x中的动作管理器

m_pActionManager = new CCActionManager();

// touchDispatcher cocos2d-x中的触屏管理器

m_pTouchDispatcher = new CCTouchDispatcher();

// KeypadDispatcher pad派发器

  m_pKeypadDispatcher = new CCKeypadDispatcher();

 

// create autorelease pool 内存自动清理管理器

CCPoolManager::sharedPoolManager()->push();

 

很多公司就是在这个地方进行cocos2d-x框架源码功能增强。比如:底层数据的加密;硬件设备调度等。

2 cocos2d-xCCDirector2

CCDirectorCCEGLView、AppDelegate产生关系图

cocos2d-x框架创应用类、视图类、导演类顺序示意图如下:

 

从图中可以总结如下:

1) cocos2d-x框架创建AppDelegate单例对象;

2) cocos2d-x框架创建CCEGLView单例对象,注册win窗口类和win窗口过程回调函数

3) cocos2d-x框架在CCEGLView类的win窗口过程回调函数中(处理窗口第一次显示消息),创建了CCDirector类对象。并初始化了CCDirector类各种管理功能(包括调度器、动作管理器、内存释放池等)。

4) cocos2d-x框架的AppDelegate的run函数,调用applicationDidFinishLaunching()入口,完成界面元素的创建,包括创建场景、初始化场景各个元素。

5) cocos2d-x框架的AppDelegate的run函数,按照默认帧频率循环调用CCDirector::sharedDirector()->mainLoop(),不断地显示win窗口。

6) 至此这个应用程序的初始化流程完毕。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值