js代碼調用c++代碼的測試

根據前面的博客對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







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章