Cocos2d-x 3.0final 終結者系列教程04-引擎架構分析

從前,有一個跟我來Android學生,老是問我:html

沉老師,爲何Android的形式被稱爲Activity,爲何要onCreate方法寫setContentView(R.layout.main)?html5

我說:linux

android

第一步在AndroidManifest.xml中加入一個Activity標籤ios

第二步寫一個類繼承Activity並覆蓋onCreate方法windows

他說:xcode

我想知道爲何要實現Activity和onCreate方法,以後我才幹完畢這個練習。網絡

我說:架構

你實現了Activity和onCreate方法就能建立窗體。未來就會明確爲何這麼作。app

他說:

我必須明確了才幹作。

我說:

你必須作了才幹明確。

。。。。

。。。。。。。

。。

。。。

。。。。

。。。。。。

晚上咱們2個都喝多了..........................................................................................

-----------------------------------------切割線--------------------------------------------------------------

1、cocos new以後的的項目源代碼文件夾例如如下:

--Classes      項目源代碼文件(這裏是用戶源代碼。不含引擎部分,每個項目都會有一個AppDelegate類繼承Application)

         AppDelegate.h

         AppDelegate.cpp 

         ......

--Resources 項目的資源文件(圖片,聲音,視頻,地圖文件,動畫文件,粒子文件)

--cocos2d     引擎源代碼               (我以爲把源代碼又放回項目文件夾是極度合理的一件事)

--proj.android     android項目文件

--proj.ios_mac     xcode項目文件

--proj.linux

--proj.win32         VS2012項目文件

--proj.wp8-xaml

2、Cocos2d-x項目的入口

    話說學過C語言的都清楚,所有程序都從main函數進入,而不一樣平臺也有不一樣平臺的入口,windows平臺是

winmain函數。Android平臺是一個入口的Activity,ios平臺和linux平臺也是main函數。那麼對於這些平臺的不一樣入口

是怎樣解決的呢,咱們看一下Cocos2d-x的系統架構。例如如下圖:


整個引擎架API構包括了系統層。圖形APi層。引擎核心層。C++應用層;腳本解釋層;腳本應用層(純粹沈大海我的發明的,若有雷同純屬意外)

腳本應用層:

         開發人員直接使用Lua語言和JavaScript語言開發的Cocos2d-x遊戲或應用,對於使用

      JavaScript腳本開發的遊戲項目除了可以生成不一樣平臺的app以外也可以高速移植到Cocos2d-html5平臺。

C++應用層:

       直接使用Cocos2d-x C++ Api開發的Cocos2d-x遊戲或應用

------------------------以上兩層是用戶代碼層---------------------------------------------------------------------------------------

腳本解釋層:

      提供了Lua腳本的支持庫和JavaScript腳本的支持庫,固然該層是使用C++語言開發的,即調用了系統平臺的API又調用了Cocos2d-x的類庫 。   

    假設咱們用腳本開發應用,可能還要對這一層作改動。才幹夠讓腳本應用層和C++應用成互相通信。因爲有的項目不全然是腳本或C++.

引擎核心層:

    使用C++封裝了遊戲開發中用到的界面繪製、動畫播放、音樂播放、網絡通信、文字處理、文件保存、粒子處理、物理引擎等遊戲邏輯和遊戲畫圖的功能。

 這些功能大多數由原有的開源項目提供,在Cocos2d-x架構下被整合在一塊兒,經過場景、圖層、節點、動做等Api概念形式提供給開發人員,儘管當初模仿cocos2d-iphone

但現有模仿。再有超越嗎。

(只是話說cocos2d-iphone也是模仿cocos2d-phthon,眼下cocos2d的創始人 睿卡多增長了Cocos2d-x團隊,這事怎麼看???)

圖形APi層:

    不一樣平臺都提供了OpenGL或DirectX這種三維圖形引擎。只是在使用的使用極其繁瑣,巴不得顯示一個6面體要寫20行代碼。還好引擎核心層作了封裝。

  (這裏咱們可以看到。事實上Cocos2d-x底層畫圖也是3維。僅僅只是沒有開發,將來Cocos3D-x也會有嘍)

系統層:

    由於圖層Api層和引擎核心層都是開源的項目,因此大多系統平臺都集成進來了,Android,ios,windows,mac,linux,bada等系統平臺都支持圖形Api層,

但每個系統平臺都會有本身的程序入口、窗體的建立方式、消息的處理機制。在系統層提供了開發的Api。

---------------------------------------------------------------------------------------------------------------

(還好儘管每個系統平臺入口不一樣。消息處理方式不一樣。窗體建立方式不一樣。但窗體的畫圖基本一樣,因此僅僅需要將不一樣平臺不一樣的內容統一化,

 在遊戲中無非就是屏幕畫圖和用戶交互2個部分,所以在不一樣平臺Cocos2d-x都實現了一個窗體的建立,而後就在這一個窗體中不斷的繪製內容。

 再把不一樣平臺的屏幕觸摸消息、按鍵消息、重力感應消息傳遞給引擎。統一交由用戶處理,

   源代碼中有3個重要類Application Director EglView,

   Application 這個類是Cocos2d-x的入口類。負責接收各平臺窗體的消息,包含窗體載入完畢,窗體進入後臺。窗體恢復到前臺

   Director 是導演類。負責屏幕的畫圖、座標系的變換、消息的傳遞、內存的管理、引擎的主循環

   EglView是窗體對象,完畢畫圖的詳細工做和平臺消息的通訊

 每個平臺都有main方法

  在main方法中完畢了:

             1.該平臺窗體的建立

             2.Application對象的建立

             3.EglView的建立

             4.Application run方法啓動遊戲主循環,在主循環中由Director控制FPS以及遊戲邏輯和遊戲畫圖。

 )

  

-------------------------------有人問。Cocos2d-x靠什麼賺錢呢?-----------------------------------------

假設有很是多平臺都支持Cocos2d-x。有豐富的應用和遊戲,一個新平臺也想支持(如win8),那就要開發系統層的封裝代碼,這時候就要交費啦。

引擎作的是裝修和招商(如萬達廣場),系統層提供的是場地(房地產公司),應用層的各類遊戲是商戶(賣鞋的。賣珠寶的。賣包的)

房地產公司在北京蓋了2棟樓,和萬達廣場合做。招來了商戶,這樣就吸引來了用戶(手機用戶)。

這樣有了實用戶消費-》招商的拿了分紅--》房地產公司的地段漲價。

相關文章
相關標籤/搜索