天天看點

【Cocos2d-X開發學習筆記】第03期:渲染架構之導演類(CCDirector)的使用

本系列學習教程使用的是cocos2d-x-2.1.4版本(截至目前為止最新穩定版) ,PC開發環境Windows7,C++開發環境VS2010        

轉載請注明出處:http://blog.csdn.net/yangyu20121224/article/details/9388731

        提到“導演”一詞,想必讀者最先聯想到的是電影。作為娛樂産業,遊戲領域和電影領域有很多類似之處,比如

在遊戲領域中,也存在制作人的職位。不過,此時提及的“導演”可不是一個人,而是在渲染架構中,有一個類充當

着導演的角色。在開始介紹Cocos2D-X引擎中的“導演”之前,請大家先想想在電影行業中的導演,通常在一部電影

中承擔怎樣的工作。

一、導演類

         CCDirector類是Coco2D-X遊戲引擎的核心,它用來建立并且控制着主螢幕的顯示,同時控制場景的顯示時間和顯

示方法。在整個遊戲裡一般隻有一個導演。遊戲的開始、結束、暫停都會調用CCDirector類的方法。CCDirector類具

有如下的功能。

<1> 初始化OpenGL會話。

<2> 設定OpenGL的一些參數和方法。

<3> 通路和改變場景以及通路Cocos2D-X的配置細節。

<4> 通路視圖。

<5> 設定投影和朝向。

CCDirector類的繼承關系如下圖所示。

【Cocos2d-X開發學習筆記】第03期:渲染架構之導演類(CCDirector)的使用

       CCDisplayLinkDirector繼承了CCDirector,是一個可以自動重新整理的導演類。它支援60/1、1/30和1/15三種動畫間

隔(幀間隔)。

       在Cocos2D-X裡面,在遊戲的任何時間,隻有一個場景對象執行個體處于運作狀态,而導演就是流程的總指揮,它負

責遊戲全過程的場景切換,這也是典型的面向對象和分層的設計原則。

需要說明的是:CCDirector是單例模式,調用CCDirector方法的标準方式如下。

// 獲得導演類
    CCDirector *pDirector = CCDirector::sharedDirector();
           

1、CCDirector類的成員資料

 CCDirector類的主要保護成員資料如下圖所示。

【Cocos2d-X開發學習筆記】第03期:渲染架構之導演類(CCDirector)的使用

       CCDirector類沒有公共的成員資料,這些屬性都不可以直接得到。

2、CCDirector類的函數

CCDirector類的主要公共函數如下圖所示。

【Cocos2d-X開發學習筆記】第03期:渲染架構之導演類(CCDirector)的使用
【Cocos2d-X開發學習筆記】第03期:渲染架構之導演類(CCDirector)的使用
【Cocos2d-X開發學習筆記】第03期:渲染架構之導演類(CCDirector)的使用

二、執行個體:CCDirector類的使用

1、由于CCDirector類是一個控制的類别,從建立項目的模版中,就可以看到CCDirector類在遊戲初始化的應用,如

下代碼所示。

bool AppDelegate::applicationDidFinishLaunching()
{
    // 獲得導演類
    CCDirector *pDirector = CCDirector::sharedDirector();

	//設定OpenGL視圖
    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());

    // 設定是否顯示每幀的時間
    pDirector->setDisplayStats(true);

    // 設定每幀的時間
    pDirector->setAnimationInterval(1.0 / 60);

    // 建立場景
    CCScene *pScene = HelloWorld::scene();

    // 運作場景
    pDirector->runWithScene(pScene);
    return true;
}      
           

         這段代碼出自AppDelegate.cpp檔案中的applicationDidFinishLaunching函數,首先獲得導演類指針,然後設定

OpenGL視圖,設定是否顯示每幀的時間,設定每幀的時間,然後建立并運作場景。這樣初始化工作就完成了。

2、在遊戲進入背景或者從背景傳回時,分别調用相應的方法停止動畫和聲音以及開始動畫和聲音,如下代碼所示。

void AppDelegate::applicationDidEnterBackground()
{
    CCDirector::sharedDirector()->stopAnimation();

    SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

void AppDelegate::applicationWillEnterForeground()
{
    CCDirector::sharedDirector()->startAnimation();

    SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
           

        在手機有外部事件進入時,也會将目前界面暫停,比如來電話的時候。

3、在遊戲結束的時候,同樣需要使用導演類的結束函數,如下代碼所示。

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    // 點選菜單按鈕退出遊戲
    CCDirector::sharedDirector()->end();
}
           

 這段代碼在HelloWorldScene.cpp檔案中。

      從以上的例子可以看出,導演類就是一個管理遊戲的指揮官。之後還會接觸到一些CCDirector類的用法,包括坐

标的轉換等,這些會在觸摸事件那部分做詳細介紹。

源碼下載下傳位址

繼續閱讀