《Cocos Creator游戏开发实战》 ——2.2.4 调用原生平台的代码

举报
华章计算机 发表于 2020/02/22 19:46:23 2020/02/22
【摘要】 本节书摘来自华章计算机《Cocos Creator游戏开发实战》 —— 书中第2章,第2.2.4节,作者是满硕泉 。

2.2.4 调用原生平台的代码

Android平台主要支持的开发语言是Java,而iOS平台主要支持的开发语言是Objective-C,一般我们开发跨Android和iOS平台的项目,都是使用C++,就像Cocos2D-X做的那样,然而有些系统的功能只能使用原生语言进行开发,所以需要提供调用原生平台的接口。

Cocos Creator提供了调用原生平台的接口,首先来看Android平台的调用:

var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)

Android平台通过callStaticMethod方法传入类名、方法名、方法签名和参数就可以调用Java层的静态方法,获得方法返回值。其中Java类名的范例如下:

org/cocos2dx/javascript/Test

需要注意的是要用斜线分割。方法签名用来标示具体调用的方法的返回值和参数类型,在Java有方法重载的情况下方法签名如下:

(I)V

括号内表示参数类型,括号后面的符号表示返回值的类型,参数类型见表2-1。

表2-1 参数类型

image.png

 

参数类型可以是任意数量,可以支持JavaScript的number、bool和string类型。

需要注意的是,在Android应用中,Cocos引擎的渲染和逻辑都是在OpenGL线程中进行的,而Android本身的UI更新是在App的UI线程中进行的,所以在脚本中进行的任何刷新UI的操作,都需要在UI线程中进行。

使用实例如下所示:

var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 1, 1);

在iOS和macOS平台上,通过callStaticMethod方法传入类名、方法名和参数就可以调用Objective-C层的静态方法:

var o = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....) 

与Java的反射调用不同,Objective-C层的调用,提供的类名不需要完整的路径,另外,调用Objective-C层的静态方法时需要传入完整的方法名,特别是当某个方法带有参数的时候,需要将冒号也带上。

callNativeUIWithTitle:andContent:

如果没有参数,那么就不需要加上冒号。使用的实例如下所示。

var ret = jsb.reflection.callStaticMethod("NativeOcClass",

                                 "callNativeUIWithTitle:andContent:",

                                   "cocos2d-js",

                                   "Example");


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。