cocos2d-x札记 (二)----CCDirector深刻

    如下内容基于cocos2d-x 2.2.5+Visual Studio 2012,除特别注明外均为原创,若有纰漏,请m本人 -_- html

    

    上一节已经弄明白了HelloWorld运行过程,相信你们对cocos2d-x有个大体了解
app

    如今来看看CCDirector,中文名“导演”,官方对于她是这样介绍的: oop

这个类被用来建立和处理主窗体,并管理如何执行或什么时候执行场景.

CCDirector也负责:

--初始化OpenGL Context;
--设置OpenGL像素格式(默认是RGB565);
--设置OpenGL缓冲深度;
--设置投影(projection)规则(默认3D);
--设置方向(默认竖直方向);

因为CCDirector是个单例,因此经过CCDirector::sharedDirector()来访问方法;

    咱们还记得上一节中显示HelloWorld界面中是这样显示的 动画

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    CCDirector* pDirector = CCDirector::sharedDirector();
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
 
    pDirector->setOpenGLView(pEGLView);
    
    ....
     
    // turn on display FPS
    pDirector->setDisplayStats(true);
 
    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);
 
    // create a scene. it's an autorelease object
    CCScene *pScene = HelloWorld::scene();
 
    // run
    pDirector->runWithScene(pScene);
 
    return true;
}

    能够看到确实是经过CCDirector::sharedDirector()来实例化CCDirector的,那么来看看这个方法 this

CCDirector* CCDirector::sharedDirector(void)
{
    if (!s_SharedDirector)
    {
        s_SharedDirector = new CCDisplayLinkDirector();
        s_SharedDirector->init();
    }

    return s_SharedDirector;
}

     这里本应该new一个CCDirector却new了一个CCDisplayLinkDirector,是怎么回事呢,来看看 spa

class CCDisplayLinkDirector : public CCDirector
{
public:
    CCDisplayLinkDirector(void) 
        : m_bInvalid(false)
    {}

    virtual void mainLoop(void);
    virtual void setAnimationInterval(double dValue);
    virtual void startAnimation(void);
    virtual void stopAnimation();

protected:
    bool m_bInvalid;
};

     能够看到CCDisplayLinkDirector是CCDirector的子类,CCDirector::sharedDirector()方法实际上是一个向上转型的过程,因此咱们用到的CCDirector实际上是CCDisplayLinkDirector,对于CCDisplayLinkDirector官方是这样介绍她的: .net

CCDisplayLinkDirector是一个显示刷新频率的同步定时器导演

她的功能和局限性分别是:

是一个调度定时器,绘制并同步显示刷新频率

只支持1/60,1/30,1/15这三个时间间隔动画

    来看看她具体作了什么 code

bool CCDirector::init(void)
{

   ...
   // create autorelease pool
    CCPoolManager::sharedPoolManager()->push();

}
    这个CCPoolManager就是cocos2d-x中的垃圾回收管理器了,这里先不详细解释垃圾回收机制
    
   这节主要讲了CCDirector经常使用功能及局限性,实例化内部机制,下节详细看看cocos2d-x垃圾回收原理

   
    
 
博客其余文章列表
     http://my.oschina.net htm

相关文章
相关标签/搜索