繼承關系
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);
擷取單例的導演對象