ios真机出现jsb错误

晓衡哥
Sat, 15 Jul 2017 00:25:33 +0000

你的代码是在触摸屏幕时调用了cc.AudioEngine.play2d函数
通过错误提示看，是你的参数个数或参数类型错误了：

js_cocos2dx_audioengine_AudioEngine_play2d : Error processing arguments

看了下jsb c++源码，参数规则如下：

1. 只一个参数时，第一个参数是必须是string类型，表示声音文件的路径

2. 有两个参数时，第一个参数同上，第二个参数为boolean类型，表示是否循环

3. 有三个参数时, 前两个参数同上，第三个参数为Number，表示音量

4. 有四个参数时，前三个参数同上，第四个参数为AudioProfile对象，表示声音资源

我看了下1.5.2 jsb绑定源码，你的错误提示在518行，大概在下面这段代码范围：

 if (argc == 2) {
        std::string arg0;
        bool arg1;
        //将输入的第一个参数（从0开始），转换为std::string类型，放到arg0变量里，返回值ok表示是否成功
        ok &= jsval_to_std_string(cx, args.get(0), &arg0);
        arg1 = JS::ToBoolean(args.get(1));
        //这里对ok, cx变量进行检查，不成功就返回false,
        //并输出提示：js_cocos2dx_audioengine_AudioEngine_play2d : Error processing arguments
        JSB_PRECONDITION2(ok, cx, false, "js_cocos2dx_audioengine_AudioEngine_play2d : Error processing arguments");

        int ret = cocos2d::experimental::AudioEngine::play2d(arg0, arg1);
        jsval jsret = JSVAL_NULL;
        jsret = int32_to_jsval(cx, ret);
        args.rval().set(jsret);
        return true;
    }

通过上面解释希望可以帮助你定义jsb函数参数问题了。

阅读整个主题