Cocos2dx中Android部分的c++和java实现相互调用
2014-05-11 23:16
627 查看
要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看如何完成它。
包括
你需要在你的项目中添加以下引用,原作者已经建立了一个在线项目。请确保在你的项目中包含文件了c++和Java,这里有个链接你可以查看一下:
EasyNDK
C++层面:
Java层面代码:
记录
为了跟其他JavaSDK相连接,比如微博SDK,FaceBookSDK等,你可以按照这些sdk的java指导说明,实现这些消息,并传递接口到cocos2dx层面调用,使之成为你自己的SDK。在cocos2dx中。我已经通过这种方法实现了APPCircle,Flurry和很多其他的SDK。
包括
你需要在你的项目中添加以下引用,原作者已经建立了一个在线项目。请确保在你的项目中包含文件了c++和Java,这里有个链接你可以查看一下:
EasyNDK
C++层面:
01 | #include"NDKHelper.h" |
02 |
03 | //在cocos2dx中的按钮点击方法 |
04 | void
|
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 | } |
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。
相关文章推荐
- Cocos2dx中Android部分的c++和java实现相互调用
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用
- 在Android中,通过JNI实现C++与Java相互调用
- Android下实现Java和JavaScript代码相互调用的代码
- android-java与C++的相互调用
- 通过JNI实现Java和C++的相互调用(转)
- 通过JNI实现Java和C++的相互调用
- Android下c++调用java实现内置外置sd卡MP3扫描并保存在文件中
- Android利用JNI实现java调用C或C++
- Cocos2d-x通过Jni实现C++与Java相互调用
- 通过JNI实现Java和C++的相互调用(转)
- Android 中Java 和C/C++的相互调用方法
- cocos2dx 之 android java 与 c++ 互相调用 代码(以百度定位为例子)
- JNI NDK (AndroidStudio+CMake )实现Java调用C C++代码流程
- android-JNI学习之java和c++相互调用
- android jni (2) java与c++相互调用