`
eric_weitm
  • 浏览: 234973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Cocos2dx android 部分代码的理解

 
阅读更多

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++等几个层次,使整个的实现思路非常清晰

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics