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

相關文章
相關標籤/搜索