cocos2dx3.2學習筆記之Director(導演類)

Cocos2d-x中,把統籌遊戲大局的類抽象爲導演類(Director),Director是整個cocos2d-x引擎的核心,是整個遊戲的導航儀。遊戲中的一些常用操作就是由Director來控制的,比如OpenGL ES的初始化,場景的轉換,遊戲暫停繼續的控制,世界座標和GL座標之間的切換,對節點的控制等,還有一些遊戲數據的保存調用,屏幕尺寸的獲取等都要由Director類來管理控制的。

因爲Director是遊戲項目的總導演,會經常調用進行一些控制,所以該Director利用了單件設計模式,也就是整個遊戲裏只有一個導演類。用getInstance() 方法取得Director的實例。

Tips:cocos2d-x2.x的版本中使用sharedDirector()方法來獲取導演類對象,而在3.x的版本中使用getInstance()來獲取,不過sharedDirector()也可以使用。

Director類的繼承關係如下:

DisplayLinkDirector繼承CCDirector,是一個可以自動刷新的導演類。它支持60/11/301/15三種動畫間隔(幀間隔)。

Director類的主要公共函數如下:

函數名

返回類型

描述

getRunningScene

場景類

獲取當前正在運行的場景

getAnimationInterval

浮點型

獲取每幀的時間

setAnimationInterval

浮點型

設置每幀的時間

isDisplayStats

布爾型

返回是否在屏幕左下角顯示每幀的時間

setDisplayStats

設置是否在屏幕左下角顯示每幀的時間

getSecondsPerFrame

浮點型

獲取每幀的時間(單位爲秒)

getOpenGLView

GL視圖

獲取繪製所有對象的OpenGL視圖

setOpenGLView

設置繪製所有對象的OpenGL視圖

isPaused 

布爾型

導演類對象是否暫停

getTotalFrames

整型

獲取從導演類開始運行的幀數

getProjection

投影類

獲取OpenGL投影

setProjection

設置OpenGL投影

setViewport

設置OpenGL接口

isSendCleanupToScene

布爾型

切換的場景是否接收清除信息

getNotificationNode

節點類

獲取一個在主場景遍歷後遍歷的節點對象

setNotificationNode

設置一個在主場景遍歷後遍歷的節點對象

getWinSize

尺寸

獲取屏幕大小(單位爲點)

getWinSizeInPixels

尺寸

獲取像素級的屏幕大小(單位爲像素)

getVisibleSize

尺寸

獲取可見屏幕大小

getVisibleOrigin

矢量

獲取可見屏幕的方向

convertToGL

矢量

轉化爲OpenGL座標系

convertToUI

矢量

轉化爲UI座標系

runWithScene

運行當前場景

pushScene

掛起當前場景,壓入棧中

popScene

從棧中彈出場景

popToRootScene

從棧中彈出所有場景直到根場景

popToSceneStackLevel 

從棧中彈出所有場景直到某個等級

(等級爲0爲導演,等級爲1爲根場景)

replaceScene

替換當前場景

end

結束遊戲

pause 

暫停遊戲

resume 

恢復遊戲

stopAnimation

停止動畫

startAnimation

開始動畫

drawScene 

繪製場景

purgeCachedData 

移除所有緩存數據

setDefaultValues

基於配置信息設置默認值

setGLDefaultValues

設置OpenGL默認值

setAlphaBlending

設置OpenGL是否使用alpha通道

setDepthTest 

設置是否測試OpenGL深度

setContentScaleFactor

設置表面像素大小(不同於屏幕大小)

getContentScaleFactor

浮點型

獲取表面像素大小

getScheduler

調度類

獲取時間調度對象

setScheduler

設置時間調度對象

getActionManager

動作管理類

獲取動作管理對象

setActionManager

設置動作管理對象

getEventDispatcher

事件調度類

獲取事件調度對象

setEventDispatcher

設置事件調度對象

getRenderer 

渲染器

返回渲染器

getDeltaTime

浮點型

返回控制檯

getFrameRate

浮點型

獲取幀率

在新建的HelloWorld項目中,打開AppDelegate.cpp,我們可以看到如下代碼:

//初始化函數
boolAppDelegate::applicationDidFinishLaunching() {
//獲取導演對象
auto director =Director::getInstance();
//獲取OpenGL視圖
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLView::create("MyGame");
            //設置OpenGL視圖
        director->setOpenGLView(glview);
    }
    // 設置顯示每幀顯示時間
    director->setDisplayStats(true);
// 設置每幀時間
director->setAnimationInterval(1.0/ 60);
    autoscene = HelloWorld::createScene();
    // 運行場景
    director->runWithScene(scene);
    return true;
}
// 遊戲進入後臺
voidAppDelegate::applicationDidEnterBackground() {
     //停止動畫
    Director::getInstance()->stopAnimation();
}
// 從後臺返回遊戲
voidAppDelegate::applicationWillEnterForeground() {
     //開始動畫
    Director::getInstance()->startAnimation();
}

HelloWorldScene.cpp中有:

//初始化
boolHelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
    //獲取OpenGL視圖可見大小
Size visibleSize= Director::getInstance()->getVisibleSize();
//獲取OpenGL視圖可見方向
Vec2 origin =Director::getInstance()->getVisibleOrigin();
…………………………….
}
//導演類結束
voidHelloWorld::menuCloseCallback(Ref* pSender)
{
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM ==CC_PLATFORM_WINRT)
     MessageBox("You pressed the close button.Windows Store Apps do not implement a close button.","Alert");
    return;
#endif
     //導演類結束
    Director::getInstance()->end();
#if(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}
由此看來,Director不愧是整個遊戲的“導演”。它在遊戲中無所不在,大到整個遊戲的控制,小到獲取屏幕的尺寸,起着至關重要的作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章