美文网首页Cocos Creator小游戏
Cocos creator ios开发—Javascript和O

Cocos creator ios开发—Javascript和O

作者: 洒一地阳光_217d | 来源:发表于2019-03-21 23:52 被阅读2次

本文以oc层以AppController.mm为例

一、js层向oc层发送消息:

1、传递1个参数:
js层发送

// "AppController"是类名
// "test01"是方法名
// "我是js传过来的参数"是传过去的参数
jsb.reflection.callStaticMethod("AppController", "test01:", "我是js传过来的参数");

oc层接收

// AppController类里
+ (void)test01:(NSString*) param {
      cocos2d::log("收到js层传过来的参数");
      NSLog(@"收到的参数是:%s", param); // "收到的参数是:我是js传过来的参数"
}

2、传递2个参数:
js层发送

// 传递多个参数时,除了第一个参数,后面的参数都要写参数名
jsb.reflection.callStaticMethod("AppController", "test01:param2:", "我是js传过来的参数1",  "我是js传过来的参数2");

oc层接收

// AppController类里
+ (void)test01:(NSString*) param param2:(NSString*)param2{
      cocos2d::log("收到js层传过来的参数");
      NSLog(@"收到的参数1是:%s", param); // "收到的参数是:我是js传过来的参数1"
      NSLog(@"收到的参数2是:%s", param2); // "收到的参数是:我是js传过来的参数2"
一、oc层向js层发送消息:

oc层发送

// 向cocos发送消息。
- (void)sendMsgToJs {
    NSString *msg = [NSString stringWithFormat:
                     @"{\"resultCode\":\"%@\",\"cmd\":\"success\"}",
                     [NSString stringWithFormat:@"%d", 1],

    if(msg == nil){
        msg = @"";
    }
    NSLog(@"向cocos发送 %@",msg);
    
    //指针: 前面有*的用->调用,和没有*的用.调用是等价的
    std::string *nsMsg = new std::string([msg UTF8String]);
    std::string jsCallStr = "deviceAPI.onOCMsg(\'"; // deviceAPI是全局变量,里面有个onOCMsg方法
    jsCallStr.append(*nsMsg);
    jsCallStr.append("\');");
    se::Value *ret = new se::Value();
    se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret);
    NSLog(@"%@",@"向cocos发送结果ok");
}

js层接收

//收到来自objectiveC的消息。
onOCMsg: function (msg) {
    console.log("收到来自objectiveC的消息");

    let msgObj = JSON.parse(msg);
    console.log(msgObj.resultCode); // 1
    console.log(msgObj.cmd); // success
},

相关文章

网友评论

    本文标题:Cocos creator ios开发—Javascript和O

    本文链接:https://www.haomeiwen.com/subject/goohvqtx.html