cocos2dx 第二节 hellocpp 源码分析 整体思路
2013-11-12 12:55
381 查看
hellocpp 源码分析
打开AndroidManifest.xml,看到基本配置信息:
可以看到activity android:name=".HelloCpp" 知道启动的hellocpp.java
查看java文件,看到
public class HelloCpp extends Cocos2dxActivity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
static {
System.loadLibrary("hellocpp");
}
}
继承自Cocos2dxActivity ,加载了一个动态库hellocpp。
然后我们看Cocos2dxActivity 这个类,init里面初始化了Cocos2dxGLSurfaceView, 并给了
Cocos2dxRenderer 设置了一个渲染器。
然后我们查看Cocos2dxGLSurfaceView类,来看下如何进行的按键传递:
onKeyDown 传给Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
触屏事件:
onTouchEvent传给Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleActionDown(idPointerDown, xPointerDown, yPointerDown);
从此处可以看到消息传递过程。
下来查看下 Cocos2dxRenderer,细细看这个文件,可以看到很多private static native void 这种接口,这些都是c++代码。
这样子就把android上层的按键和触屏传给了c++本地代码。
Cocos2dxRenderer里面的onDrawFrame会不断地被调用,去刷新数据。
Cocos2dxRenderer.nativeRender();的实现为:
cocos2d-x-2.1.4\cocos2d-x-2.1.4\cocos2dx\platform\android\jni里面的Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender 函数,进行刷新导演类
这里再看一个Java_org_cocos2dx_lib_Cocos2dxHelper.cpp 类,里面的terminateProcessJNI
这个是反向的c++调用java的方法:
找到#define CLASS_NAME "org/cocos2dx/lib/Cocos2dxHelper" 这个类里面的terminateProcess方法,直接调用。
对应的java文件为:
Cocos2dxHelper.java 里面的terminateProcess函数执行android.os.Process.killProcess(android.os.Process.myPid()); 退出当前进程。
我们的hellocpp项目里面的HelloWorldScene.cpp
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
这个便为一个menu,点击执行menuCloseCallback
这个函数执行了 CCDirector::sharedDirector()->end(); 这个里面执行了terminateProcessJNI 退出程序了。
第一讲结束了,后期会继续分析整个框架,当前只是涉及到皮毛。
打开AndroidManifest.xml,看到基本配置信息:
可以看到activity android:name=".HelloCpp" 知道启动的hellocpp.java
查看java文件,看到
public class HelloCpp extends Cocos2dxActivity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
static {
System.loadLibrary("hellocpp");
}
}
继承自Cocos2dxActivity ,加载了一个动态库hellocpp。
然后我们看Cocos2dxActivity 这个类,init里面初始化了Cocos2dxGLSurfaceView, 并给了
Cocos2dxRenderer 设置了一个渲染器。
然后我们查看Cocos2dxGLSurfaceView类,来看下如何进行的按键传递:
onKeyDown 传给Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
触屏事件:
onTouchEvent传给Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleActionDown(idPointerDown, xPointerDown, yPointerDown);
从此处可以看到消息传递过程。
下来查看下 Cocos2dxRenderer,细细看这个文件,可以看到很多private static native void 这种接口,这些都是c++代码。
这样子就把android上层的按键和触屏传给了c++本地代码。
Cocos2dxRenderer里面的onDrawFrame会不断地被调用,去刷新数据。
Cocos2dxRenderer.nativeRender();的实现为:
cocos2d-x-2.1.4\cocos2d-x-2.1.4\cocos2dx\platform\android\jni里面的Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender 函数,进行刷新导演类
这里再看一个Java_org_cocos2dx_lib_Cocos2dxHelper.cpp 类,里面的terminateProcessJNI
这个是反向的c++调用java的方法:
找到#define CLASS_NAME "org/cocos2dx/lib/Cocos2dxHelper" 这个类里面的terminateProcess方法,直接调用。
对应的java文件为:
Cocos2dxHelper.java 里面的terminateProcess函数执行android.os.Process.killProcess(android.os.Process.myPid()); 退出当前进程。
我们的hellocpp项目里面的HelloWorldScene.cpp
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
这个便为一个menu,点击执行menuCloseCallback
这个函数执行了 CCDirector::sharedDirector()->end(); 这个里面执行了terminateProcessJNI 退出程序了。
第一讲结束了,后期会继续分析整个框架,当前只是涉及到皮毛。
相关文章推荐
- Android cocos2dx游戏开发——示例程序HelloCpp源码分析
- Android cocos2dx游戏开发——示例程序HelloCpp源码分析
- [cocos2dx]TestCpp框架源码分析
- 【cocos2dx】新建helloworld.cpp项目代码分析
- Android cocos2dx HelloCpp代码分析
- cocos2dx 第一节 调通的hellocpp源码
- cocos2dx3.2 由Hello_World看整体思路
- GEF源码分析(三) 模拟GEF设计思路,解剖GEF2 附图:包含GEF的Editor创建时序图
- HDFS源码分析DataXceiver之整体流程
- LDD3源码分析之hello.c与Makefile模板
- 天网搜索TSE部分源码分析-url.cpp
- Jquery 源码分析一: 整体架构、链式调用、插件接口
- Launcher3 源码分析(一) 整体结构及核心类
- Google Gallery for Android 4.4源码分析以及主UI修改——Gallery整体结构
- jQuery-1.9.1源码分析系列(一)整体架构
- jQuery 2.0.3 源码分析core - 整体架构
- Sizzle源码分析:一 设计思路
- x265源码分析:sao.cpp 自适应样点补偿
- jQuery.prototype.init选择器构造函数源码思路分析
- Cocos2d-x学习笔记(19)(TestCpp源码分析-3)