Cocos2dx android 部分代码的理解
一、概述
基本上是搭建了基本的android app的架子,并对一些系统相关的功能进行了封装
二、java部分的细节
1、入口是 Cocos2dxActivity = Cocos2dxHelper + Cocos2dxGLSurfaceView
2、Cocos2dxHelper 封装系统相关的功能(声音、音效、资源、目录、压缩纹理、传感器、本地存储、文本渲染),基本上是android c++部分的java实现
3、Cocos2dxGLSurfaceView 本身属于android的view体系,内部封装了opengles的渲染环境,会把键盘、触摸、传感器、等各种事件传给renderer,也会处理textview的逻辑
4、Cocos2dxRenderer 是真正的渲染线程的逻辑,会把opengl初始化、帧渲染、系统事件等回调给native的c++
三、c++部分的细节
第一部分:jni相关(platform/android/jni目录下)
1、JniHelper 主要是将c++与jvm之间进行交互的操作进行了抽象
2、java回调c++的函数符合jni的标准,以 Java_org_cocos2dx_lib_Cocos2dxHelper_XX 的方式来作为函数名
3、c++调用java的部分以jni打头
4、Java_org_cocos2dx_lib_Cocos2dxHelper.cpp 里面基本上统一写了c++调用java的代码,并实现了java需要的2个回调
5、IMEJni.cpp 主要是打开和关闭IME(软键盘)
6、DPIJni.cpp 取得android中屏幕的dpi
7、TouchesJni.cpp 将java的touch事件传给c++
8、Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp 实现主循环
9、Java_org_cocos2dx_lib_Cocos2dxAccelerater.cpp 传感器的回调,传递给c++
10、Java_org_cocos2dx_lib_Cocos2dxBitmap.cpp 调用了java中对应文件的功能
第二部分:实现c++跨平台的接口的部分(platform/android目录下)
1、CCDtdC.h 标准c头文件
2、CCPlatformDefine.h 定义了一个有用的宏 CC_ASSERT
3、CCImage.cpp 和java部分的image一起实现了文字的渲染
4、CCFileUtilsAndroid.cpp android平台的文件操作实现,isFileExist 相对路径从assets中找,绝对路径直接在os中找;读文件也是分2种情况;getWritablePath是
files目录,比如 /data/data/com.xx.yy/files, source dir 是安装包的位置,比如 /data/app/com.xx.yy-2.apk
5、CCEGLView opengl的扩展功能
6、CCCommon.cpp 主要是提供了ndk log和 本地对话框的功能 CCLog、CCMessageBox
7、CCApplication 提供了设置renderer帧率、获得当前系统的语言 的接口
8、CCAccelerometer 将jni的部分封装到c++中
四、总结
区分了java、jni、平台相关c++、跨平台c++等几个层次,使整个的实现思路非常清晰