您的位置:首页 > Web前端 > JavaScript

js代码调用c++代码的测试

2016-05-21 18:49 471 查看
根据前面的博客对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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: