您的位置:首页 > 移动开发 > Cocos引擎

Cocos2dx android 部分代码的理解

2014-03-10 17:33 246 查看
原文出处:http://eric-weitm.iteye.com/blog/1995343

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++等几个层次,使整个的实现思路非常清晰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: