cocos2d-x遊戲引擎開發之流程

來源:互聯網
上載者:User

         自己接觸過很多技術,現在很模糊,現在想想,寫一篇部落格關於這個技術的話,可能自己的理解和記憶都會更深,並且可以提供學習的人一點資料和見解。coco2d-x,可以說是想從事手機遊戲開發的人,一個最好的起點,我也打算好好研究下cocos2d-x,並打算把學習過程和想法記錄下。我們開始的平台就考慮windws。

     當我們產生一個cocos2d-x的項目後在專案檔夾下面的win32檔案夾下的main.cpp,這個就是遊戲最開始的進入點。我們進去可以看到熟悉的_tWinMain()函數,在這個函數中,就兩行 AppDelegate app;定義了一個app,cocos2d::CCApplication::sharedApplication().run();調用這個app的run方法。

     AppDelegate 是繼承 CCApplication,而我們進入到CCApplication::sharedApplication()中可以發現他返回的就是一個CCApplication 的對象。調用的run()方法之後,我大概能想到,是在讓程式跑起來。這裡,我們就得有個問題,cocos2d-x引擎是怎麼和我們的app:AppDelegate 聯絡起來的?這裡我們需要看看CCApplication 的構造方法中來,看了這個函數之後,似乎我們就可以把一切聯絡起來了。一個啟動流程,思考三分鐘。

    如果,你上面確實在思考的,你馬上感想到的:

     1.run()是不是CCApplication的虛擬方法?如果是的話,AppDelegate 是否實現了他?如果不是,那run是在做什麼事情?

     2.是通過什麼介面來調用我們的AppDelegate的?換句話說,就是,我們要實現那些方法,來進行初始化,和獲得最終的執行權。以及他們的調用時機是什嗎?

      對應第一個問題,是run不是虛擬函數,也就是說AppDelegate不存去實現這個方法,這個似乎跟其他系統的設計有點不同。cocos2d-x用run來進行平台初始化,也就是說在準備一個應用程式必須要的東西,其中最主要的是視窗和視窗過程函數,而cocos2d-x的渲染工作是opengl實現的,所有,這個過程就包括給我們建立一個opengl的環境。而第二個問題,就通過run函數來解決。介面有:initInstance ,applicationDidFinishLaunching,而我們進入到AppDelegate裡面來,看到就跟這個差不多。這裡出現了,一個很重要的類:CCDirector。這個類就是導演類,最後的主流程都交給他,但導演喊ka之前,我們得為他準備一些材料(包括情境).在cocos2d裡面這個事情是在initInstance
()來做的,前面講過這個函數是個virtual,在我們的AppDelegate會實現,我們反過來想以想,我們為導演準備什麼,就是需要初始化哪些東西?至少我們得準備一個視窗,才可能去畫圖。cocos2d底層是用opengl來渲染的,所以,我們就可以想到,我們得初始一個視窗和opengl,準備好視窗給導演使用。而這個類就是CCEGLView,這個是在我們在cocos2d上開發,接觸到的第二個類,我們可以把他理解成環境準備類,他就是把平台的視窗和opengl聯絡的紐帶。就是我們開始說的材料準備負責人。

      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.