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

时间:2022-12-26 12:09:55

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

本文目的

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

包括

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

 C++ 层面:

 #include "NDKHelper.h" 

 // 在cocos2dx中的按钮点击方法
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
//注册一个selector,那么当我们的native环境(java环境)调用这个字符串名字的函数(此处为名字为SampleSelector的函 数)的时候,这个selector可以响应请求
//注意:设置组名是为了在析构函数中能够清除掉selector
NDKHelper::AddSelector("HelloWorldSelectors",
"SampleSelector",
callfuncND_selector(HelloWorld::SampleSelector),
this); // 为这个将要传递到native(也就是Java)语言中的消息设置参数
// 在c++中发送要调用的函数名
CCDictionary* prms = CCDictionary::create();
prms->setObject(CCString::create("SampleSelector"), "to_be_called"); // 最后在当前环境(c++)中调用native方法
SendMessageWithParams(string("SampleSelector"), prms);
} // 一个回调选择器,native语言(java)将会调用它
void HelloWorld::SampleSelector(CCNode *sender, void *data)
{
CCLog("Called from native environment");
} // 析构函数移除掉HelloWorldSelectors中的选择器(selectors)
HelloWorld::~HelloWorld()
{
// 移除相关联的选择器,因为我们将要销毁当前实例
NDKHelper::RemoveSelectorsInGroup("HelloWorldSelectors");
}

Java层面代码:

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

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

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

Sample Android Project

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

  1. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

  2. cocos2dx中android下动态更新.so文件

    作者:HU 转载请注明,原文链接:http://www.cnblogs.com/xioapingguo/p/4037595.html  因为没用lua脚本写游戏,所以每次发布出去后,发现在bug,需要 ...

  3. 解决 Cocos2d-x 中 Android.mk 手动添加源文件

    转自:http://blog.csdn.net/ypfsoul/article/details/8909178 Makefile Android.mk 引发的思索 在我们编写 Android 平台 c ...

  4. Cocos2d-x 发布 Android

    Cocos2d-x 发布 Android 前置需求: Android NDK Android SDK OR Eclipse ADT Bundle Android AVD target installe ...

  5. Android进程so注入Hook java方法

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53769331 Andorid的Hook方式比较多,现在来学习下,基于Android ...

  6. 在Cocos2d-X中新建Android项目

    Windows下创建Cocos2d-X的Android项目并不复杂,关键是要改几个环境变量 一.进入Cocos2d-X主目录修改“create-android-project.bat” 大家都知道要点 ...

  7. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  8. cocos2d-x for android配置 & 运行 Sample on Linux OS

    1.从http://www.cocos2d-x.org/download下载稳定版 比如cocos2d-x-2.2 2.解压cocos2d-x-2.2.zip,比如本文将其解压到 /opt 目录下 3 ...

  9. android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)

    引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁 ...

随机推荐

  1. 报表开发工具中mysql数据库连接编码转化失效解决方案

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...

  2. hitTest:WithEvent 和Responder Chain

    这个方法是找到那个View被touch,当找到后就成为响应链的第一个了,如果他不能处理这个Event,那么就找nextResponder 直至application 如果不能处理,那就会丢弃掉. ht ...

  3. Go语言 字符串

    在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要. Go中的字符串和C#中的一样(java也是),字符串内容在初始化后不可修改. 需要注意的是在Go中字符串是有UTF-8编码 ...

  4. 高质量程序设计指南C/C++语言——C++/C常量

  5. U盘启动盘安装Win7/9/10系统攻略

    UltraISO制作U盘启动盘安装Win7/9/10系统攻略 U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便,随时都可以制作系统启动盘. U盘建议选择8G ...

  6. node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

  7. Jenkins + Github持续集成构建Docker容器,*&人工自能(AI)模块

    本文分两部分,第一部分是手动计划任务的方式构建Github上的Docker程序,第二部分是用Github webhook Trigger一个自动构建任务. Jenkins采用2.5版本Docker采用 ...

  8. Javascript 装饰器极速指南

    pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...

  9. echarts生成的图表大小怎么随屏幕的大小改变自适应

    最近在做图表,记录一下用到的知识点,当做自己的日记吧,会不断添加新内容 1,echarts生成的图表大小怎么随屏幕的大小改变自适应? this.chart.setOption(this.options ...

  10. window7安装python的xgboost库方法

    window7安装python的xgboost库方法 1.下载xgboost-master.zip文件,而不是xgboost-0.4a30.tar.gz,xgboost-0.4a30.tar.gz是更 ...