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

Cocos2dx中Android部分的c++和java实现相互调用

2014-05-11 23:16 627 查看
要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看如何完成它。

包括

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

C++层面:

01
#include"NDKHelper.h"
02
03
//在cocos2dx中的按钮点击方法
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),
11
this
);
12
13
//为这个将要传递到native(也就是Java)语言中的消息设置参数
14
//在c++中发送要调用的函数名
15
CCDictionary*prms=CCDictionary::create();
16
prms->setObject(CCString::create(

"SampleSelector"
),

"to_be_called"
);
17
18
//最后在当前环境(c++)中调用native方法
19
SendMessageWithParams(string(

"SampleSelector"
),prms);
20
}
21
22
//一个回调选择器,native语言(java)将会调用它
23
void
HelloWorld::SampleSelector(CCNode*sender,

void
*data)
24
{
25
CCLog(

"Calledfromnativeenvironment"
);
26
}
27
28
//析构函数移除掉HelloWorldSelectors中的选择器(selectors)
29
HelloWorld::~HelloWorld()
30
{
31
//移除相关联的选择器,因为我们将要销毁当前实例
32
NDKHelper::RemoveSelectorsInGroup(

"HelloWorldSelectors"
);
33
}
Java层面代码:

01
/**当activity第一次被创建调用*/
02
public
void

onCreate(BundlesavedInstanceState)
03
{
04
super.onCreate(savedInstanceState);
05
06
//在主activity中,设置这个activity作为c++消息的接受者
07
AndroidNDKHelper.SetNDKReciever(

this
);
08
}
09
10
//实现这个被c++发送消息调用的方法
11
//确保这个方法的名字跟c++传递过来的字符串相同
12
//比如我们从c++中传递"SampleSelector"字符串,这就是为什么我们创建这个方法的原因了
13
public
void

SampleSelector(JSONObjectprms)
14
{
15
Log.v(

"SampleSelector"
,

"传过来的参数是:"
+prms.toString());
16
17
StringCPPFunctionToBeCalled=null;
18
try
19
{
20
CPPFunctionToBeCalled=prms.getString(

"to_be_called"
);
21
}
22
catch

(JSONExceptione)
23
{
24
//TODOAuto-generatedcatchblock
25
e.printStackTrace();
26
}
27
28
AlertDialog.Builderbuilder=

new
AlertDialog.Builder(

this
);
29
builder.setMessage(

"这是一个android层中的popup"
).
30
setTitle(

"HelloWorld!"
).
31
setNeutralButton(

"OK"
,null).show();
32
33
//发送带参数的消息,仅仅当selector列表中有这个相同名字的函数,c++才会接受这些消息,
34
AndroidNDKHelper.SendMessageWithParameters(CPPFunctionToBeCalled,null);
35
}
记录

为了跟其他JavaSDK相连接,比如微博SDK,FaceBookSDK等,你可以按照这些sdk的java指导说明,实现这些消息,并传递接口到cocos2dx层面调用,使之成为你自己的SDK。在cocos2dx中。我已经通过这种方法实现了APPCircle,Flurry和很多其他的SDK。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: