從前,有一個跟我來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棟樓,和萬達廣場合做。招來了商戶,這樣就吸引來了用戶(手機用戶)。
這樣有了實用戶消費-》招商的拿了分紅--》房地產公司的地段漲價。