Cocos2d-JS v3.0加入了在原生平台调用java/oc静态方法的特性。使用方法如下:
java调用:
jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。
方法签名:
目前Cocos2d-js中支持的Java类型签名有下面4种:
Java类型
签名
int
I
float
F
boolean
Z
String
Ljava/lang/String; (后面带分号)
示例:
()V 表示一个没有参数没有返回值的方法
(I)V 表示参数为一个int,没有返回值的方法
(I)I 表示参数为一个int,返回值为int的方法
(IF)Z 表示参数为一个int和一个float,返回值为boolean的方法
注意:
在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。
OC调用:
jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....);
在jsb.reflection.callStaticMethod方法中,我们通过传入OC的类名,方法名,参数就可以直接调用OC的静态方法,并且可以获得OC方法的返回值。
注意:
1、参数中的类名,只需要传入OC中的类名即可,与Java不同,类名并不需要路径
2、需要传入完整的方法名,特别是当某个方法带有参数的时候,需要将:也带上 ,没有参数不需要带。
3、在OC的实现中,如果方法的参数需要使用float、int、bool的,请使用如下类型进行转换:
float,int 请使用NSNumber类型
bool请使用BOOL类型
目前参数和返回值支持 int, float, bool, string,其余的类型暂时不支持。