在写这篇文章之前,xxx已经写过了几篇关于改初始化文件主题的文章,想要了解的朋友可以去翻一下之前的文章
我们道知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
2) Cocos2dxGLSurfaceView 派生于 GLSurfaceView, 这样就能够直接用调 opengl的函数图绘, 并在此View 中表现了
3) 重要的逻辑都在Cocos2dxRenderer中成完, 最要重的就是它
Cocos2dxRenderer
1) onSurfaceCreated 的 nativeInit 被用调, Cocos2d 有所要重对象( CCDirector, CCSence, HelloWorld 等) 都是这里初始化的
2) onDrawFrame 的时候, 就是通知Cocos2d制绘一帧, 具体容内可以考参
另外还有输入的理处,也是通过Cocos2dxRenderer 从 Android的java层 传递到了 Cocos2d的 native 层
nativeInit
下面这张图,描述了 Cocos2D 的对象是如何初始化的
onSurfaceCreated 的 nativeInit 被用调, 也就是说: "可以用opengl 图绘了, Cocos2d 你初始化吧"
Cocos2d 做了下面的作工
1) 根据 Android 供给屏幕巨细信息设置 FrameSize
2) 新建 AppDelegate, 意注 AppDelegate 是 CCApplication 的派生类, 当AppDelegate 的run 被用调, 它会用调到applicationDidFinishLaunching
3) 而后 Director, Scene 都被创立,
4) 最后让 Director 运行想运行的 Scence
通过以上这些 Cocos2D 就被适配 Android 统系中了
文章结束给大家分享下程序员的一些笑话语录:
问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?
答:因为李艳红这种败类,所以我没女友!