因为最近一直有小伙伴问我这个问题怎么解决的,这里小菜鸟献上调用解决方法。
一、调用函数实现
第一个参数是想要调用的对象,第二个是对象类的函数名,后面是传递给js的参数。
bool JSScriptCallFun::callJSDelegate(cocos2d::Ref* nativeObj, const std::string& jsFunctionName, int value1, int value2, const char* content)
{
js_proxy_t * p = jsb_get_native_proxy(nativeObj);
if (!p) return false;
JSContext *cx = ScriptingCore::getInstance()->getGlobalContext();
jsval args[3];
args[0] = int32_to_jsval(cx, value1);
args[1] = int32_to_jsval(cx, value2);
args[2] = charptr_to_jsval(cx, content);
return ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), jsFunctionName.c_str(), 3, args);
}
二、函数调用
你自己的类(继承自ref)* testObj = balabala;
JSScriptCallFun::getInstance()->callJSDelegate(testObj, “testCallBack”, 0, 0, “我是传递给js的数据”);
三、js回调函数实现
你自己的类 = {
testCallBack : function(v1,v2,v3){
}
};
四、jsb绑定
1、你自己的类必须注册一下jsb,也就是js如何调c++,自己去找帖子,很多大神都写了当然c++调js很多大神也写了
2、写个通用的专门给c++调用js的类,定义在js,保存在c++
比如我的代码是这么写的var AppGlobal = cc.Component.extend({定义在js)}
app.coreservice.setComponent(上面的对象);
保存在c++
void CoreService::setComponent(cocos2d::Component* pComponent)
{
m_compoent = pComponent;
m_compoent->retain();
};
然后你的所有c++调js的函数功能都可以统一的写在AppGlobal里了。
以上。纯手打,加代码复制,如有看不懂的,我也不负责。开玩笑的,大家多交流。若有问题,还请大神指点。