Cocos2d-x源代码剖析(引用库)

来源:互联网 发布:sql数据库安全性在哪 编辑:程序博客网 时间:2024/06/01 20:32

我们先从目录结构开始讲解,然后以上篇文章的SimpleGame Activity继承的Cocos2dxActivity讲解怎么让android程序和cocos2dx协作

1.引用库目录结构剖析

引用库的目录结构如图

H和。Cpp主要是做适配器,适配不同的平台,android下则为适配器的实现

Android目录如上,其中。H和。Cpp是前面适配器的适配实现,javajni为衔接java apindk层相互调用

2.引用库源代码剖析

     我们从jni入手,看他主要让javandk衔接了什么!

DPIJni:主要给ndk层调用,int getDPIJNI()通过JNI直接调用java层的org.cocos2dx.lib.Cocos2dxHelper的int getDPI()静态函数

IMEJni:ndk层调用,void openKeyboardJNI()调用org.cocos2dx.lib.Cocos2dxGLSurfaceView的void openIMEKeyboard()静态函数,  void closeKeyboardJNI() 调用org.cocos2dx.lib.Cocos2dxGLSurfaceView的void closeKeyboard()静态函数,void setKeyboardStateJNI(int bOpen)根据open调用上述两个函数

TouchesJni:主要从Java层获取org.cocos2dx.lib.Cocos2dxRenderer的touch事件给NDK层的directoropenglview touch,同时也把keypad传递给directorKeypadDispatcher

JniHelper:提供了jni一些帮助函数,比如获取java层的函数什么的

Java_org_cocos2dx_lib_Cocos2dxAccelerometer:JAVA层的org.cocos2dx.lib.Cocos2dxAccelerometer的onSensorChanged传递给NDK的 DirectorAccelerometer,并update x,y,z,timestamp

Java_org_cocos2dx_lib_Cocos2dxBitmap:提供int getFontSizeAccordingHeightJni(int height);,std::string getStringWithEllipsisJni(const char* pszText, float width, float fontSize);给ndk使用,主要从org.cocos2dx.lib.Cocos2dxBitmap类获取

Java_org_cocos2dx_lib_Cocos2dxHelper:衔接org.cocos2dx.lib.Cocos2dxHelper类,让ndk能调用到上层

Java_org_cocos2dx_lib_Cocos2dxRenderer:主要根据activity的生命周期设置cocos2dx的生命周期,派发一些ime的操作给ndk,并执行cocos2d程序循环director mainLoop()


接着,我们从java层入手,看java层做了什么东西



Cocos2dxAccelerometer:主要是提供sensor的监测,传递给ndksensor数据,通过Cocos2dxGGLSurfaceView queueEvent发送给ndkJava_org_cocos2dx_lib_Cocos2dxAccelerometer

Cocos2dxActivity:android 创建cocos2dx activity需继承此类,此类主要初始化了Cocos2dxGLSurfaceView view,并设置了Cocos2dxRenderer和Cocos2dxEditText ,同时提供了acitvity生命周期给NDK层作为cocos2dx的生命周期,也初始化了app信息,apk信息,产生Cocos2dxMusic,Cocos2dxAccelerometer和Cocos2dxSound实例

Cocos2dxBitmap:主要是创建TextBitmap, 得到的pixel传给了ndk cocos2dx

Cocos2dxEditBoxDialog:创建可输入的对话框

Cocos2dxEditText :GLSurfaceView兼容的edittext

Cocos2dxGLSurfaceView:把触屏,点击,生命周期等事件传递给ndk cocos2dx,并响应一些edittext

Cocos2dxHandler :处理对话框的handler

Cocos2dxHelper:被ndk创建Cocos2dxAcceleromete, Cocos2dxMusic,Cocos2dxSound,并提供相关的操作,同时提供一些Cocos2dxPrefsFile。Xml的配置信息

Cocos2dxLocalStorage:创建jsb.sqlite数据库,提供keyvalue的存储

Cocos2dxMusic:利用MediaPlayer播放音乐,供ndk层调用

Cocos2dxRenderer:利用androidGLSurfaceview 的生命周期创造cocos2d的生命周期,并画图

Cocos2dxSound:利用android SoundPool播放特效声音

Cocos2dxTextInputWraper:TextWatcher主要监视Textview之类的变换输入

Cocos2dxTypefaces:字体的加载,供ndk层调用


最后,看下cocos2dx android适配实现


CCAccelerometer:主要操作java层的G-SENSOR,并回传想x,y,z,timestamp值,然后再传给CCAccelerometerDelegate

CCApplication:cocos2dx application的实现,主要是开始一个程序的启动,完成其生命周期的第一步applicationDidFinishLaunching,同时可以设置Animation间隔

CCCommon:主要实现cocos2dxcclogccmessageboxcclualog

CCDevice:获取java层的dpi

CCEGLView: cocos2dx cceglviewandroid实现

CCFileUtilsAndroid:cocos2dx ccfileutils的实现,文件类的操作

CCImage:提供文字bitmap产生,并让java层可以回传pixel数据给你NDK

CCPlateformDefineandroid平台特性的api转为cocos2dx调用

CCStdC.h:包含需要使用的C标准库头文件