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

项目打包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_com_qmx_road2god_Cocos2dxActivity_exitGame(JNIEnv*  env, jobject thiz)
    {
        Director::getInstance()->end();
	pc_client_destroy(my_pomelo_client);
    }
}

函数名说明:com_qmx_road2god对应java的包名com.qmx.road2god,Cocos2dxActivity对应类名,exitGame对应函数名。JNIEnv* env, jobject thiz是固定的参数,可以在后面加上自己函数的参数,和java中函数参数保持一致即可。

3.最重要的一步

在java中调用exitGame()前加上这一句:static { System.loadLibrary("cocos2dcpp"); }      //coco2dcpp是编译c++后生成的链接库名,可以在android.mk中看到这样一句话

LOCAL_MODULE_FILENAME :=libcocos2dcpp,lib后面的名字就是链接库名。

例:

public class Cocos2dxActivity extends NativeActivity{	
	static { System.loadLibrary("cocos2dcpp"); }   // 可以在这里调用
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
结束。

我看了好多文章,都讲的很详细,但唯独没有最后一个步骤,而我如果没有最后一个步骤,会提示No implementation found for native Lcom/qmx/road2god/Cocos2dxActivity;.exitGame()v之类的错误,这就是链接不到c++实现。我不太了解别人是如何实现这一步骤的,如果有谁知道,可以告诉我,不胜感激!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值