《Cocos Creator游戏开发实战》 ——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 参数类型
参数类型可以是任意数量,可以支持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");
- 点赞
- 收藏
- 关注作者
评论(0)