我们知道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 中吧 )


Cocos2D 如何做 Android 适配_第1张图片


Java 层适配类

Cocos2dx 提供了几个Java 层的适配类, 它们在 Cocos2dxActivity 的onCreate 被初始化.


Cocos2D 如何做 Android 适配_第2张图片


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

2) Cocos2dxGLSurfaceView 派生于 GLSurfaceView, 这样就可以直接调用 opengl的函数绘图, 并在此View 中显示了

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


Cocos2dxRenderer

1) onSurfaceCreated 的 nativeInit 被调用, Cocos2d 所有重要对象( CCDirector, CCSence, HelloWorld 等) 都是这里初始化的

2) onDrawFrame 的时候, 就是通知Cocos2d绘制一帧, 详细内容可以参考 理解 Cocos2D 如何绘制帧

Cocos2D 如何做 Android 适配_第3张图片



另外还有输入的处理,也是通过Cocos2dxRenderer 从 Android的java层 传递到了 Cocos2d的 native 层


nativeInit

下面这张图,描述了 Cocos2D 的对象是如何初始化的

Cocos2D 如何做 Android 适配_第4张图片



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. Android 虚拟机Dalvik、Android各种java包功能、Android相关文件
  2. android实现横竖屏不间断播放文件
  3. Android mediaplayer 播放本地音乐文件
  4. Android NDK开发(一)——ndk-build编译生成so库文件并使用
  5. Android 学习笔记4---签名Android的执行文件
  6. Android控件之利用selector自定义的带文字的图片按钮
  7. Android 开发之Matrix图片处理类的使用

随机推荐

  1. Android 拖拽效果实现代码分享 - ORIETec
  2. android启动优化
  3. android studio3.0build.gradle包含的svn
  4. sqlite android
  5. Android 沙箱
  6. Android录音并播放(mp3或amr格式)
  7. OpenGL.Shader:1-重新认识Android上OpenGL
  8. android实现签名功能
  9. Android Compile Error Do not Accept Li
  10. Android Studio实现人民币与美元的转换