1 cocos2d-x之CCDirector类1
问题1:CCDirector类是什么时候创建?
问题2:cocos2d-x应用窗口的消息回调函数是如何和CCDirector类创建连接起来的?1、复习上一节:
创建AppDelegate对象后,全局唯一AppDelegate对象会执行run函数进行消息循环处理;创建CCEGLView对象后,该全局唯一CCEGLVie对象会处理win消息回调,也就是LRESULTCCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)。若不懂请回看第一节。2、创建窗口对象后,第一次激活窗口显示的时,CCEGLView::WindowProc函数会做相应处理,关键代码就是444行
CCApplication::sharedApplication()->applicationWillEnterForeground();
典型分析如下:
1)444行这块代码是典型的多态,用父类指针执行子类对象。
2)没有C++基础的同学,请思考,多态实现的三个条件,不管是C还是Java都一样。
(1有继承,2要虚函数重写,3父类指针指向子类对象),
3)多态的结果就是,从父类CCApplication,去执行子类AppDelegate::applicationWillEnterForeground()函数。
4)AppDelegate::applicationWillEnterForeground()函数会执行,CCDirector::sharedDirector()->startAnimation();就会被调用。5)CCDirector::sharedDirector()就是这句话,第一次调用,开始产生CCDirector类的对象。
我们再看该函数内做了什么。
注意一点细节的是,创建CCDisplayLinkDirector类对象,继承关系如下:
classCCDisplayLinkDirector : public CCDirector。其中CCDisplayLinkDirector类重写了以下几个方法
virtualvoid mainLoop(void);
virtualvoid setAnimationInterval(double dValue);
virtualvoid startAnimation(void);
virtual void stopAnimation()。
6)我们再看s_SharedDirector->init()函数做了什么。狐狸的尾巴终于露出来了。就是在这个在bool CCDirector::init(void)函数里面,cocos2d-x框架初始化了各种各样的器件。王保明bombing提醒你,一种典型的组合设计方法清晰可见、敬佩之情悠然而生。
在这里你仔细看看吧。最值得你看的地方。
// scheduler cocos2d-x中的调度器
m_pScheduler = newCCScheduler();
// action manager cocos2d-x中的动作管理器
m_pActionManager = newCCActionManager();
// touchDispatcher cocos2d-x中的触屏管理器
m_pTouchDispatcher = newCCTouchDispatcher();
// KeypadDispatcher pad派发器
m_pKeypadDispatcher = newCCKeypadDispatcher();
// create autorelease pool 内存自动清理管理器
CCPoolManager::sharedPoolManager()->push();
很多公司就是在这个地方进行cocos2d-x框架源码功能增强。比如:底层数据的加密;硬件设备调度等。