码迷,mamicode.com
首页 > 移动开发 > 详细

cocos2d-x在android的接合简单记录

时间:2015-03-11 19:14:56      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

普通android工程入口:

src/org/cocos2dx/cpp_empty_test_diff/MainActivity.java

cocos2d-x入口稍微不同

src/org/cocos2dx/lib/Cocos2dxActivity.java

见 onLoadNativeLibraries 加载NDK编译生成的.so

这时候应用已经启动。

然后利用jni调用c++内容,启动游戏引擎。

具体是:

Cocos2dxActivity.java init -> onCreateView -> 

new Cocos2dxGLSurfaceView(this)

Cocos2dxGLSurfaceView extends GLSurfaceView 类似 win32 的 事件回调函数,涉及键盘和touch等

Cocos2dxActivity.java init 中 this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());

Cocos2dxRenderer implements GLSurfaceView.Renderer

见 其中的 public void onDrawFrame(final GL10 gl) 函数,就是引擎的循环起点

不关心帧率处理,函数就是仅仅调用了 Cocos2dxRenderer.nativeRender();

 

回到 Cocos2dxActivity.java 

    private static native void nativeRender();

    private static native void nativeInit(final int pWidth, final int pHeight);

这些函数是jni的知识,方法的实现在.so中

分别是:

Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp 中的void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender

javaactivity-android.cpp 中的 Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit

    JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender(JNIEnv* env) {
        cocos2d::Director::getInstance()->mainLoop();
    }

可以看到 mainLoop的调用;

 

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
{
        auto glview = director->getOpenGLView();
        glview = cocos2d::GLViewImpl::create("Android app");
        glview->setFrameSize(w, h); // frame size 的第一手资料
        director->setOpenGLView(glview);

        cocos2d::Application::getInstance()->run(); // 这里的run是空的
   
}

剩余的流程和 iOS的流程基本一致,请见“cocos2d-x在iOS的接合简单记录”;

对android不太熟悉,仅记录到此

 

cocos2d-x在android的接合简单记录

标签:

原文地址:http://www.cnblogs.com/d20062303732/p/4330622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!