您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 使用jni实现java调用c++

2015-09-07 18:39 746 查看
项目打包android版本时,需要添加监听返回键的事件处理,即:当按下返回键弹出确认对话框,选择是,退出游戏,终止进程。这里需要处理进程的结束以及soket的断开,这就需要用到c++那边的代码,比如Director::getInstance()->end(); pc_client_destroy(my_pomelo_client);等。所以我们需要实现一个方法,用来在java中调用c++。

1.java中方法实现:

例:
public class Cocos2dxActivity extends NativeActivity{
.......
public static native void exitGame();   // 这里必须是native函数,因为要链接c++的实现
.......
}

2.c++中方法实现

在*.cpp中
extern "C"
{
JNIEXPORT void JNICALL Java_org_cocos2dx_lua_AppActivity_exitGame(JNIEnv*  env, jobject thiz)
{
Director::getInstance()->end();
}
}
函数名说明:com_qmx_road2god对应java的包名com.qmx.road2god,Cocos2dxActivity对应类名,exitGame对应函数名。JNIEnv* env, jobject thiz是固定的参数,可以在后面加上自己函数的参数,和java中函数参数保持一致即可。

3.最重要的一步

<img src="http://img.blog.csdn.net/20150907184036567?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
在java中调用exitGame()前加上这一句:static { System.loadLibrary("cocos2dlua"); } //coco2dcpp是编译c++后生成的链接库名,可以在android.mk中看到这样一句话LOCAL_MODULE_FILENAME :=libcocos2dlua,lib后面的名字就是链接库名。例:①

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: