欢迎光临Software MyZone,有问题可留言或到站点论坛发帖,争取第一时间帮忙解决 || 站点论坛:火龙论坛 || 淘宝小店:应小心的易淘屋 【欢迎大家提建设性意见】

Cocos2D 如何做 Android 适配 转

欢迎热爱编程的朋友们参与到cocos2d-x编程中,为了给大家提供良好的交流环境,网站以开启QQ群
Software MyZone:66202765(群号,欢迎加入,若满,请加1群)
Software MyZone 1群(2dx):286504621
【加群请写:Software MyZone或者是firedragonpzy】
淘宝店:【应小心的易淘屋】初次开店,大家多多支持……
群论坛:火龙论坛正试运营阶段,欢迎大家多提些建设性意见……
摘自:http://blog.csdn.net/span76/article/details/8831399

我们知道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 系统中了

1条评论

发表评论