cocos2dx 第二节 hellocpp 源码分析 整体思路

来源:互联网 发布:windows mrtg 编辑:程序博客网 时间:2024/05/10 13:17
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 退出程序了。
    
    第一讲结束了,后期会继续分析整个框架,当前只是涉及到皮毛。
原创粉丝点击