CocosCreator系列——js与oc交互(有参调用,多参调用和无参调用)

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值