Cocos2dx中Android部分的c++和java实现相互调用(高级篇)

前端之家收集整理的这篇文章主要介绍了Cocos2dx中Android部分的c++和java实现相互调用(高级篇)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)

作者:qinning199 时间:2013-09-16 分类cocos2dx技巧cocos2dx教程 评论暂无评论 浏览:1992

本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97

本文目的

要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看如何完成它。

包括

你需要在你的项目中添加以下引用,原作者已经建立了一个在线项目。请确保在你的项目中包含文件了c++和Java,这里有个链接你可以查看一下:EasyNDK

C++ 层面:

01 #include "NDKHelper.h"
02
03 // 在cocos2dx中的按钮点击方法
04 voidHelloWorld::menuCloseCallback(CCObject* pSender)
05 {
06 //注册一个selector,那么当我们的native环境(java环境)调用这个字符串名字的函数(此处为名字为SampleSelector的函 数)的时候,这个selector可以响应请求
07 //注意:设置组名是为了在析构函数中能够清除掉selector
08 NDKHelper::AddSelector("HelloWorldSelectors",
09 "SampleSelector"10 callfuncND_selector(HelloWorld::SampleSelector),247)">11 this);
12 13 // 为这个将要传递到native(也就是Java)语言中的消息设置参数
14 // 在c++中发送要调用函数
15 CCDictionary* prms = CCDictionary::create();
16 prms->setObject(CCString::create(),"to_be_called");
17
18 // 最后在当前环境(c++)中调用native方法
19 SendMessageWithParams(string(20 }
21 22 // 一个回调选择器,native语言(java)将会调用
23 HelloWorld::SampleSelector(CCNode *sender,*data)
24 {
25 CCLog("Called from native environment"26 27 28 // 析构函数移除掉HelloWorldSelectors中的选择器(selectors)
29 HelloWorld::~HelloWorld()
30 31 // 移除相关联的选择器,因为我们将要销毁当前实例
32 NDKHelper::RemoveSelectorsInGroup(33 }

Java层面代码

@H_794_403@/** 当activity第一次被创建调用*/
publiconCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// 在主activity中,设置这个activity作为c++消息的接受者
AndroidNDKHelper.SetNDKReciever(//实现这个被c++发送消息调用方法
//确保这个方法的名字跟c++传递过来的字符串相同
// 比如我们从c++中传递"SampleSelector"字符串,这就是为什么我们创建这个方法的原因了
SampleSelector(JSONObject prms)
Log.v("传过来的参数是 : "+ prms.toString());
String CPPFunctionToBeCalled = null;
try
CPPFunctionToBeCalled = prms.getString(}
catch(JSONException e)
// TODO Auto-generated catch block
e.printStackTrace();
AlertDialog.Builder builder =newAlertDialog.Builder(builder.setMessage("这是一个android层中的popup").
setTitle("Hello World!").
setNeutralButton("OK"// 发送带参数的消息,仅仅当selector列表中有这个相同名字的函数,c++才会接受这些消息,
34 AndroidNDKHelper.SendMessageWithParameters(CPPFunctionToBeCalled,null);
35 记录

为了跟其他JavaSDK相连接,比如微博SDK,FaceBook SDK等,你可以按照这些sdk的java指导说明,实现这些消息,并传递接口到cocos2dx层面调用,使之成为你自己的SDK。在cocos2dx中。我已经通过这种方法实现了APPCircle,Flurry和很多其他的SDK。

网上也有完整的源代码样例工程,下面是链接

Sample Android Project

原文链接:https://www.f2er.com/cocos2dx/341534.html

猜你在找的Cocos2d-x相关文章