位置: 编程技术 - 正文

cocos2dx里访问调用Android函数(cocos2dx scrollview)

编辑:rootadmin

推荐整理分享cocos2dx里访问调用Android函数(cocos2dx scrollview),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2d读取文件,cocos2d schedule,cocos2dx怎么打开,cocos2dx webview,cocos2d schedule,cocos2dx webview,cocos2d schedule,cocos2dx schedule,内容如对您有帮助,希望把文章链接给更多的朋友!

首先Himi大概的介绍一个类 JniHelper ;

此类主要用于Jni与Java层之间的相互访问的作用,那么此类的常用的一些函数这里首先介绍下,否则直接上代码不太容易吸收 ;

JniHelper 类常用函数:

1. getStaticMethodInfo (四个参数,bool 返回&#;)

使用示例代码:

bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/ai/ommr/OhMonsterMR4Android","testFun", "()V");复制代码

此函数主要用于获取Java定义的类静态函数是否存在,返回bool;

此函数有3个参数:

第一参数: minfo ->JniMethodInfo 类型,后面详细说;

第二个参数:类的路径。

第三个参数:方法名(第一参数类中的函数)

第四个参数:(参数)返回类型

关于第一个和第二个参数都比较容易理解,那么第三个参数需要重点介绍一下;例如你在Java中定义一个如下函数 public void helloJni(){};

那么getStaticMethodInfo函数第三个参数你应该传入 “()V” 表示此函数无参无返回&#;!

如果有这么一个函数: public int helloJni(int _int){return };

那么getStaticMethodInfo函数第三个参数你应该传入 “(I)I” 表示此函数需要传入一个int类型的参数并且返回一个int类型!

大概说两个童鞋们应该基本理解了,那么下面详细写一些对照表,留给大家对照;

参数、返回&#;样式对照表:

这里的签名指的就是getStaticMethodInfo函数第三个参数中传入的样式;

2. getMethodInfo 类&#;与第一个函数,只是对应非静态函数;此函数主要用于获取Java定义的类非静态函数是否存在,返回bool;

JniMethodInfo 类:

此类型主要用户保存类结构体,可以通过JniHelper类的getStaticMethodInfo函数实例化JniMethodInfo对象,从而使用实例的env属性调用CallStaticVoidMethod,CallVoidMethod,CallStaticIntMethod等函数进行对保存的类结构调用函数;

常用的函数如下:(静态系列函数)

1. CallStaticVoidMethod(classID,methodID);

2. CallStaticIntMethod(classID,methodID);

3~(n-1) ……省略掉,童鞋们一看就明白;

n. CallStaticObjectMethod(classID,methodID);

带参数的函数:(如int类型)

CallStaticVoidMethod(classID,methodID,int _int);

cocos2dx里访问调用Android函数(cocos2dx scrollview)

非静态系列函数:

1. CallVoidMethod(jobj,methodID);

2. CallIntMethod(jobj,methodID);

3~(n-1) ……省略掉,童鞋们一看就明白;

n. CallStaticObjectMethod(jobj,methodID);

带参数的函数:(如int类型)

CallVoidMethod(classID,methodID,int _int);

这里讲解下几个参数函数:

1. classID: 类ID , JniMethodInfo 对象包含此属性;

2. methdID: 方法ID,JniMethodInfo 对象也包含此属性;

3. jobj : java中Object类型,如自定义类,String…

非静态函数调用的时候,需要的是对象,所以与静态函数调用的第一个参数不同;

那么既然能调用Java的函数,那就能得到函数返回&#;,但是这里我们得到的返回&#;书写类型如下:

譬如返回int 类型,在Xcode中使用 jint 这种形式,更多形式如下:

int -> jint

…省略,大家一看就懂得;

object -> jobject

估计有的童鞋已经晕了,没关系,下面Himi写了一些例子代码,结合来看就一目了然啦。

Xcode中先导入如下头文件:

//使用预编译,对当前平台为Android时才会导入如下头文件#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include <jni.h>#include "platform/android/jni/JniHelper.h"#include <android/log.h>#endif复制代码

示例代码段1:

Xcode 代码:

////静态函数示例1.无参数,无返回&#;---------------------------------$-----------------------------#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool&#;表示是否找到此函数 bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/ai/ommr/OhMonsterMR4Android","testFun", "()V"); if (!isHave) { CCLog("jni:此函数不存在"); }else{ CCLog("jni:此函数存在"); //调用此函数 minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID); } CCLog("jni-java函数执行完毕");#endif复制代码

Android(Java) 代码:

// 静态函数示例1.无参数,无返回&#;public static void testFun() { Log.e("Himi", "静态函数示例1.无参数,无返回&#;");}复制代码

运行截图:

示例代码段2:

Xcode 代码:

//静态函数示例2.有参数,无返回&#;------------------------------$--------------------------------#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool&#;表示是否找到此函数 bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/ai/ommr/OhMonsterMR4Android", "testFunWithInt","(I)V"); if (!isHave) { CCLog("jni:此函数不存在"); }else{ CCLog("jni:此函数存在"); //调用此函数 minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,); } CCLog("jni-java函数执行完毕");#endif复制代码

Android(Java) 代码:

// 静态函数示例2.有参数,无返回&#;public static void testFunWithInt(int _int) { Log.e("Himi", "静态函数示例1.有参数,无返回&#;;传入的参数int=" &#; _int);}复制代码

运行截图:

示例代码段3:

Xcode 代码:

//静态函数示例3.有参数,有返回&#;--------------------------------$--------------------------------#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo;//定义Jni函数信息结构体//getStaticMethodInfo 次函数返回一个bool&#;表示是否找到此函数bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/ai/ommr/OhMonsterMR4Android","testFunWithIntAndRtn","(I)I");jint _int ;if (!isHave) { CCLog("jni:此函数不存在");}else{ CCLog("jni:此函数存在"); //调用此函数 _int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID,); //尝试jint是否能正常接收返回的int&#; JniMethodInfo minfo_ty; bool isHave = JniHelper::getStaticMethodInfo(minfo_ty, "com/ai/ommr/OhMonsterMR4Android", "testFunWithInt", "(I)V"); if (isHave) { minfo_ty.env->CallStaticVoidMethod(minfo_ty.classID, minfo_ty.methodID,_int); }}CCLog("jni-java函数执行完毕");#endif复制代码

Android(Java) 代码:

// 静态函数示例3.有参数,有返回&#;public static int testFunWithIntAndRtn(int _int) { Log.e("Himi", "静态函数示例1.有参数,有返回&#;;传入的参数int=" &#; _int); return _int&#;;}复制代码

运行截图:

示例代码段4:

Xcode 代码:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool&#;表示是否找到此函数 bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/ai/ommr/OhMonsterMR4Android","testFunWithStringAndRtn","(I)Ljava/lang/String;"); jobject jobj; if (!isHave) { CCLog("jni:此函数不存在"); }else{ CCLog("jni:此函数存在"); //调用此函数 jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,); } CCLog("jni-java函数执行完毕");#endif复制代码Android(Java) 代码:// 静态函数示例4.有参数,有返回&#;(String类型)public static String testFunWithStringAndRtn(int _int) { Log.e("Himi", "静态函数示例4.有参数,有返回&#;(String类型);int=" &#; _int); return "yes,return 'String' is OK --by Himi";}复制代码

运行截图:

示例代码段5:

Xcode 代码:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool&#;表示是否找到此函数 bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/ai/ommr/OhMonsterMR4Android", //类的路径 "rtnActivity", //方法名 "()Ljava/lang/Object;"); //括号里的是参数,后面的是返回&#;。 jobject jobj; if (isHave) { jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); } CCLog("正确获取到 jobj"); // isHave = JniHelper::getMethodInfo(minfo, "com/ai/ommr/OhMonsterMR4Android", //类的路径 "nostaticFun", //方法名 "()V"); //括号里的是参数,后面的是返回&#;。 if (isHave) { minfo.env->CallVoidMethod(jobj, minfo.methodID); } CCLog("jni-java函数执行完毕");#endif复制代码Java 代码://---- 函数示例之非静态函数调用//(先获取个对象)public static Activity actInstance;//定义单例public static Object rtnActivity() { return actInstance;}//使用此对象进行调用非静态函数public void nostaticFun() { Log.e("Himi", "no static Function is OK - By Himi");}复制代码

运行截图:

转自

cocosdx让AppDelegate支持全局更新机制 众所周知,cocos2d里面强大的更新函数schedule是基于实体框架存在的,就比如说你创建了一个ccnode,且必须加入到场景中,才能支持schedule功能.而在总的AppDelegat

让一切都停下来——Unschedule HelloWorldScene.h:HelloWorldScene.cpp(修改的部分代码):运行项目,可发现每一帧都会调用update()函数,而每隔两秒都会调用一次MyUpdate()函数如果要取消update函

触发器——scheduleOnce HelloWorldScene.h:HelloWorldScene.cpp(部分修改代码):以调试模式运行项目后,可以发现,隔2s之后会调用cookFinish函数,而且只会调用一次

标签: cocos2dx scrollview

本文链接地址:https://www.jiuchutong.com/biancheng/368985.html 转载请保留说明!

上一篇:cocos2dx 更改帧频(cocos2dx camera)

下一篇:cocosdx让AppDelegate支持全局更新机制

  • 中国电信的通信网络
  • 小规模纳税人免税会计分录
  • 生产企业退税计算方法怎么选择
  • 个税专项扣除如何申报
  • 个人银行帐户可查询多少年
  • 承兑汇票给别人时对方需要出具什么
  • 用进项税冲抵当月增值税的会计分录
  • 公司简易注销需要清算吗
  • 公共部门管理中具有哪些作用
  • 股权变更怎么收费
  • 购销印花税会计分录
  • 个人合伙企业有没有企业所得税
  • 以下属于财政收入的形式有
  • 采购工程物资会议纪要
  • 上海市购销合同印花税计税金额怎么算?
  • 装修发票是什么发票
  • 年终一次性奖金个税计算
  • 无偿赠送不得抵扣吗?
  • 高温气温
  • 核定经营额是一个季度还是一个月
  • 企业可以采用在产品按固定成本计算法的有
  • 挂靠别人的施工单位资质,要交什么税?
  • 应收账款及票据
  • 竣工决算调整入库流程
  • 开机进入睡眠模式按哪个键解除
  • 长期借款和短期借款时间
  • 新固定资产的六大类型
  • 怎么进入bios设置界面设置内存
  • 怎样判断事情
  • php redis实现秒杀思路
  • 拍卖费怎么收
  • 拍卖获得收入个税
  • PHP:curl_multi_exec()的用法_cURL函数
  • 外贸企业代理出口销售的出口退税手续
  • 库存现金盘亏处理前分录
  • PQIBrowser.exe是什么进程 PQIBrowser进程查询
  • 基建会计和建筑会计的区别
  • 超过认证期的发票怎么办
  • 今日清明是清明开始还是结束
  • ctf web题型
  • formdata方法
  • 户外电源需要要充电吗
  • 工业企业采购部工资计入什么科目
  • 支付版权费用账号是什么
  • 当月销售次月开票就按次月申报
  • 简易征收的进项税怎么处理
  • 进口货物的账务处理办法
  • 住宿费当月抵扣吗
  • 现金收入的管理的内容包括哪些
  • 应交税费案例分析题
  • 生育津贴是怎么申请
  • 小企业会计准则跨年红冲
  • 所得税费用影响当期损益吗
  • 企业代扣代缴个税
  • 上年折旧没提今年可以补提吗
  • 出售投资性房地产的收入计入什么科目
  • 金三税务系统怎样修改财务人员跟办税人?
  • 贷款购车怎么做会计分录
  • Centos7下MySQL安装教程
  • windows10x预览版
  • 怎么彻底卸载visual
  • bios怎么设置efi引导
  • macbook air一键恢复出厂设置
  • linux find -a
  • centos如何操作
  • win7怎么设置鼠标双击打开
  • win8如何激活
  • Win10预览版桌面图标和任务栏不翼而飞怎么办?
  • perl的$1
  • 捉虫趣事作文200字
  • Jquery EasyUI Datagrid右键菜单实现方法
  • bat脚本ftp上传文件
  • 你可能不知道的湖北
  • jQuery Mobile和HTML5开发App推广注册页
  • 利用python进行
  • 原生js
  • 焦点问题是什么
  • 纳税人识别号是几位数
  • 一般纳税人的进项票必须当月认证吗?
  • 营业税属于地方税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设