歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Cocos2D 如何做 Android 適配

我們知道Cocos2D 是跨平台的 ( Android, iOS, BlackBerry ), 因此它必須把自己適配到不同平台上, 這些適配包括:

1) 屏幕顯示

2) 用戶輸入

3) 進程主循環

4) 資源文件 (圖片,音樂)

資源適配

Android 的程序是 Apk, Apk 也是一個 Zip 文件. 處理資源文件有下列幾步

1) Cocos2dxHelper 初始化時會吧 Java 層的 ApkPath 傳遞到 native 層

2) native 成的 CCFileUtils 在用 shareFileUtils() 初始化時, 會新建自己的派生類 CCFileUtilsAndroid, 並把 apk 解開到臨時目錄.

程序運行中要load資源文件的時候, 就到臨時目錄去找

3) 在程序退出時, 這個臨時目錄會被刪除

補充:( 實際上 shareFileUtils() 就在CCFileUtilsAndroid.cpp中實現, build iOS 版本不會包含它, 而是在CCFileUtilsiOS.cpp 中吧 )

 

 

Java 層適配類

Cocos2dx 提供了幾個Java 層的適配類, 它們在 Cocos2dxActivity 的onCreate 被初始化.

 

 

1) 上面我們提到Cocos2dxHelper, 可以看它的 init 被調用

2) Cocos2dxGLSurfaceView 派生於 GLSurfaceView, 這樣就可以直接調用 opengl的函數繪圖, 並在此View 中顯示了

3) 主要的邏輯都在Cocos2dxRenderer中完成, 最重要的就是它

 

Cocos2dxRenderer

 

1) onSurfaceCreated 的 nativeInit 被調用, Cocos2d 所有重要對象( CCDirector, CCSence, HelloWorld 等) 都是這裡初始化的

2) onDrawFrame 的時候, 就是通知Cocos2d繪制一幀, 詳細內容可以參考 理解 Cocos2D 如何繪制幀

 

 

另外還有輸入的處理,也是通過Cocos2dxRenderer 從 Android的java層 傳遞到了 Cocos2d的 native 層

 

nativeInit

下面這張圖,描述了 Cocos2D 的對象是如何初始化的

 

 

onSurfaceCreated 的 nativeInit 被調用, 也就是說: "可以用opengl 繪圖了, Cocos2d 你初始化吧"

Cocos2d 做了下面的工作

1) 根據 Android 提供屏幕大小信息設置 FrameSize

2) 新建 AppDelegate, 注意 AppDelegate 是 CCApplication 的派生類, 當AppDelegate 的run 被調用, 它會調用到applicationDidFinishLaunching

3) 在applicationDidFinishLaunching 中, Director, Scene 都被創建,

4) 最後讓 Director 運行 Scence

通過以上這些 Cocos2D 就被適配 Android 系統中了。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved