本系列學習教程使用的是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類的繼承關系如下圖所示。
CCDisplayLinkDirector繼承了CCDirector,是一個可以自動重新整理的導演類。它支援60/1、1/30和1/15三種動畫間
隔(幀間隔)。
在Cocos2D-X裡面,在遊戲的任何時間,隻有一個場景對象執行個體處于運作狀态,而導演就是流程的總指揮,它負
責遊戲全過程的場景切換,這也是典型的面向對象和分層的設計原則。
需要說明的是:CCDirector是單例模式,調用CCDirector方法的标準方式如下。
// 獲得導演類
CCDirector *pDirector = CCDirector::sharedDirector();
1、CCDirector類的成員資料
CCDirector類的主要保護成員資料如下圖所示。
CCDirector類沒有公共的成員資料,這些屬性都不可以直接得到。
2、CCDirector類的函數
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類的用法,包括坐
标的轉換等,這些會在觸摸事件那部分做詳細介紹。
源碼下載下傳位址