如下內容基於cocos2d-x 2.2.5+Visual Studio 2012,除特別註明外均爲原創,若有紕漏,請m本人 -_- html
上一節已經弄明白了HelloWorld運行過程,相信你們對cocos2d-x有個大體瞭解
app
如今來看看CCDirector,中文名「導演」,官方對於她是這樣介紹的: oop
這個類被用來建立和處理主窗體,並管理如何執行或什麼時候執行場景. CCDirector也負責: --初始化OpenGL Context; --設置OpenGL像素格式(默認是RGB565); --設置OpenGL緩衝深度; --設置投影(projection)規則(默認3D); --設置方向(默認豎直方向); 因爲CCDirector是個單例,因此經過CCDirector::sharedDirector()來訪問方法;
咱們還記得上一節中顯示HelloWorld界面中是這樣顯示的 動畫
bool AppDelegate::applicationDidFinishLaunching() { // initialize director CCDirector* pDirector = CCDirector::sharedDirector(); CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); pDirector->setOpenGLView(pEGLView); .... // turn on display FPS pDirector->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object CCScene *pScene = HelloWorld::scene(); // run pDirector->runWithScene(pScene); return true; }
能夠看到確實是經過CCDirector::sharedDirector()來實例化CCDirector的,那麼來看看這個方法 this
CCDirector* CCDirector::sharedDirector(void) { if (!s_SharedDirector) { s_SharedDirector = new CCDisplayLinkDirector(); s_SharedDirector->init(); } return s_SharedDirector; }
這裏本應該new一個CCDirector卻new了一個CCDisplayLinkDirector,是怎麼回事呢,來看看 spa
class CCDisplayLinkDirector : public CCDirector { public: CCDisplayLinkDirector(void) : m_bInvalid(false) {} virtual void mainLoop(void); virtual void setAnimationInterval(double dValue); virtual void startAnimation(void); virtual void stopAnimation(); protected: bool m_bInvalid; };
能夠看到CCDisplayLinkDirector是CCDirector的子類,CCDirector::sharedDirector()方法實際上是一個向上轉型的過程,因此咱們用到的CCDirector實際上是CCDisplayLinkDirector,對於CCDisplayLinkDirector官方是這樣介紹她的: .net
CCDisplayLinkDirector是一個顯示刷新頻率的同步定時器導演 她的功能和侷限性分別是: 是一個調度定時器,繪製並同步顯示刷新頻率 只支持1/60,1/30,1/15這三個時間間隔動畫
來看看她具體作了什麼 code
bool CCDirector::init(void) { ... // create autorelease pool CCPoolManager::sharedPoolManager()->push(); }這個CCPoolManager就是cocos2d-x中的垃圾回收管理器了,這裏先不詳細解釋垃圾回收機制
博客其餘文章列表
http://my.oschina.net htm