天天看點

cocos2dx進階學習之CCDirector

繼承關系

CCDirecotor -> CCObject, TypeInfo

處理主視窗消息,管理何時、何種方式執行場景。

經常被翻譯成導演,負責管理整個遊戲的程序推動和周邊支援。

成員

inline CCScene* getRunningScene(void) { return m_pRunningScene; }

擷取目前運作的場景,一個時刻隻有一個場景在運作

inline double getAnimationInterval(void) { return m_dAnimationInterval; }

virtual void setAnimationInterval(double dValue) = 0;

FPS相關設定

inline bool isDisplayStats(void) { return m_bDisplayStats; }

inline void setDisplayStats(bool bDisplayStats) { m_bDisplayStats = bDisplayStats; }

在程式左下角是否顯示FPS資訊

inline float getSecondsPerFrame() { return m_fSecondsPerFrame; }

擷取一幀的時間(秒)

inline CCEGLView* getOpenGLView(void) { return m_pobOpenGLView; }

void setOpenGLView(CCEGLView *pobOpenGLView);

設定視窗,對于CCDirector這個導演來說,CCEGLView可以類比為舞台。

inline bool isNextDeltaTimeZero(void) { return m_bNextDeltaTimeZero; }

void setNextDeltaTimeZero(bool bNextDeltaTimeZero);

inline bool isPaused(void) { return m_bPaused; }

是否暫停了

inline unsigned int getTotalFrames(void) { return m_uTotalFrames; }

幀數,自從這個導演啟動後,調用的幀數

inline ccDirectorProjection getProjection(void) { return m_eProjection; }

void setProjection(ccDirectorProjection kProjection);

void reshapeProjection(const CCSize& newWindowSize);

ccDirectorProjection相關

void setViewport();

設定glViewPort

inline bool isSendCleanupToScene(void) { return m_bSendCleanupToScene; }

是否一個被替換的場景會受到cleanup消息

CCNode* getNotificationNode();

void setNotificationNode(CCNode *node);

用來顯示全局消息的node,這個消息不受場景切換影響

CCDirectorDelegate* getDelegate() const;

void setDelegate(CCDirectorDelegate* pDelegate);

導演代理,提供更新接口可供使用者重新實作

CCSize getWinSize(void)

CCSize getWinSizeInPixels(void);

CCSize getVisibleSize();

CCPoint getVisibleOrigin();

getWinSize與getWinSizeInPixels的差别在于是否使用DesignResolutionSize,getWinSizeInPixsels是視窗實際大小

而getWinSize是DesignResolutionSize,getVisibleSize是在有DesignResolutionSize的情況下,有對不齊的情況時不一樣的值

CCPoint convertToGL(const CCPoint& obPoint);

CCPoint convertToUI(const CCPoint& obPoint);

坐标轉換,從GL坐标到UI坐标的互相轉換,GL坐标左下角為原點,UI坐标則是坐上角

void runWithScene(CCScene *pScene);

進入scene,這個函數在第一次進入scene時候調用

void pushScene(CCScene *pScene);

暫停目前scene,将其推入暫停scene棧,啟動新的scene

void popScene(void);

彈出目前運作的scene,如果棧中還有scene,那麼繼續棧頂的scene,如果沒有,程式退出

void popToRootScene(void);

彈出所有的scene,除了最後一個不彈

void popToSceneStackLevel(int level);

彈到某個地方,如果level為0,那麼相當于程式結束,如果level為1,那麼相當于popToRootScene,如果level大于棧深度,那啥也不幹

void replaceScene(CCScene *pScene);

替換scene,和pushScene不一樣的是,replace不在棧中儲存,是直接替換

void end(void);

void pause(void);

void resume(void);

進度管理,結束,暫停,繼續scene

virtual void stopAnimation(void) = 0;

virtual void startAnimation(void) = 0;

停止和開始畫場景,預設實作和pause、resume相同

void purgeCachedData(void);

清空緩存,主要是CCTextureCache, CCSpriteFrameCache, CCLabelBMFont所指緩存

在cocos2dx中有不少緩存類,這些緩存類,類似舞台上的常用道具,常用道具當然放在離演員最近的地方(記憶體)

但是當地方(記憶體)不夠時,導演負責指揮清除這些緩存。

void setDefaultValues(void);

void setGLDefaultValues(void);

void setAlphaBlending(bool bOn);

void setDepthTest(bool bOn);

設定一些OpenGL參數

void setContentScaleFactor(float scaleFactor);

float getContentScaleFactor(void);

設定縮放因子

virtual void mainLoop(void) = 0;

主循環,負責畫scene

static CCDirector* sharedDirector(void);

擷取單例的導演對象