Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
发布时间:2020-12-14 16:30:05 所属栏目:百科 来源:网络整理
导读:二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇) 作者:qinning199 时间:2013-09-16 分类:cocos2dx技巧cocos2dx教程 评论:暂无评论 浏览:1992 本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97 本文目的 要完成在cocos2dx
二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
作者:qinning199
时间:2013-09-16
分类:cocos2dx技巧cocos2dx教程
评论:暂无评论
浏览:1992
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97 本文目的 要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看如何完成它。 包括 你需要在你的项目中添加以下引用,原作者已经建立了一个在线项目。请确保在你的项目中包含文件了c++和Java,这里有个链接你可以查看一下:EasyNDK C++ 层面:
04 |
void HelloWorld::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层面代码:
/** 当activity第一次被创建调用*/
public
onCreate(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 =
new
AlertDialog.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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |