CocosCreator系列——js与oc交互
ios篇终于来了,mac电脑到了一段时间了,一直在熟悉mac系统,用惯了windows系统的用mac就感觉一个像在水里游泳一个在沙地里游泳的(手动捂脸),习惯了以后感觉,爱玛……真香,好了,正文开始:
首先新建一个工程,然后构建成iOS包。
1.js调用oc,不传参数:
js脚本:点击按钮调用onBtnClick1方法,AppController就是oc代码的脚本名,test1是方法名,不传参数就不用写参数
onBtnClick1(){
jsb.reflection.callStaticMethod("AppController","test1");
},
oc脚本:首先在AppController.h中定义要调用的方法
+可以理解成Java中的static,属于全局方法,如果是-,表示此类私有方法,括号内是返回值,后面紧跟一个方法名
+(void) test1;
然后在AppController.mm中实现test1方法
+(void) test:(NSString*)s1{
NSLog(@"收到js传过来的参数是:'%@'",s1);
}
然后在cocos客户端绑定按钮点击事件,运行游戏就可以在Xcode控制台看到输出信息了
以此为例,下面介绍传参方法:
注意:当有参数传递时,js脚本第二个参数方法后面要加一个冒号
onBtnClick2(){
//传递一个参数
jsb.reflection.callStaticMethod("AppController","test2:","哈哈哈哈");
},
oc端:
+(void) test2:(NSString*)s1{
NSLog(@"收到js传过来的参数是:'%@'",s1);
}
上述情况是传递一个参数时,下面介绍多个参数传递:
当传递多个参数时,每一个方法后面都要跟一个冒号
js端
onBtnClick3(){
var s = jsb.reflection.callStaticMethod("AppController","test3:test4:test5:","呵呵呵呵","嘻嘻嘻嘻","嘿嘿嘿嘿");
}
oc端
+(void) test3:(NSString*)s1 test4: (NSString*)s2 test5:(NSString*)s3{
NSLog(@"收到js传过来的参数是:'%@,%@,%@'",s1,s2,s3);
}
js调oc到此结束,下面时oc调js
首先在js端写一个方法,挂在到全局对象下(在这我方便测试,挂在Window下了)
onLoad: function () {
this.label.string = this.text;
window.callOCMethod = (str)=>{
console.log(str);
}
},
oc端
首先在.mm文件中引入#include “cocos/scripting/js-bindings/jswrapper/SeApi.h”
别忘了在AppController.h中声明方法
+(void)callJSMethod{
std::string strRet = "嘎嘎嘎嘎";
std::string jsCallStr = cocos2d::StringUtils::format("callOCMethoed(\"%s,%d\");", strRet.c_str(),10);
se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str());
}
注:序列化如果是字符串,请用%@,整型用%d,浮点型用%f。