根据前面的博客对JS调用C++的代码进行了测试,在Node里面加了jsbTest的方法进行Android打包测试。
1.编写coco2dx层的方法
CCNode.h
<span style="font-size:12px;">virtual int jsbTest() const;</span>
CCNode.cpp
int Node::jsbTest(void) const
{
return 100;
}
2.编写js层的方法
jsb_cocos2dx_auto_api.js
cc.Node = {
jsbTest : function() {
return 0;
},
}
3.进行方法映射
jsb_cocos2dx_auto.hpp
bool js_cocos2dx_Node_jsbTest(JSContext *cx, uint32_t argc, jsval *vp); //声明
jsb_cocos2dx_auto.cpp
bool js_cocos2dx_Node_jsbTest(JSContext *cx, uint32_t argc, jsval *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
JS::RootedObject obj(cx, args.thisv().toObjectOrNull());
js_proxy_t *proxy = jsb_get_js_proxy(obj);
cocos2d::Node* cobj = (cocos2d::Node *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_Node_jsbTest : Invalid Native Object");
if (argc == 0) {
uint16_t ret = cobj->jsbTest();
jsval jsret = JSVAL_NULL;
jsret = uint32_to_jsval(cx, ret);
args.rval().set(jsret);
return true;
}
JS_ReportError(cx, "js_cocos2dx_Node_jsbTest : wrong number of arguments: %d, was expecting %d", argc, 0);
return false;
}
static JSFunctionSpec funcs[] = {
JS_FN("jsbTest", js_cocos2dx_Node_jsbTest, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), //映射
}
运行结果
05-21 18:13:18.293: D/cocos2d-x debug info(5009): JS: 100