您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-js-v3.0-rc2:js绑定调用c++函数 1

2014-08-23 21:24 309 查看
分享一种简单的js调用c++代码的绑定方法、

首先用c++写一个方法,为了简便就在CCSprite里面写个一个sumTwonum(两个数相加)

在CCSprite.h里添加

public:

int sumTwonum(int a,int b);

在CCSprite.cpp里添加

int Sprite::sumTwonum(int a,int b){

return a+b;

}

接着就是jsb里面绑定这个函数

在jsb_cocos2dx_auto.hpp里添加

bool js_cocos2dx_Sprite_sumTwonum(JSContext *cx, uint32_t argc, jsval *vp);

在jsb_cocos2dx_auto.cpp里添加

bool js_cocos2dx_Sprite_sumTwonum(JSContext *cx, uint32_t argc, jsval *vp)

{

jsval *argv = JS_ARGV(cx, vp);

bool ok = true;

JSObject *obj = JS_THIS_OBJECT(cx, vp);

js_proxy_t *proxy = jsb_get_js_proxy(obj);

cocos2d::Sprite* cobj = (cocos2d::Sprite *)(proxy ? proxy->ptr : NULL);

JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_Sprite_getOffsetPosition : Invalid Native Object");

if (argc == 2) {

int arg0;

int arg1;

do {

ok &= jsval_to_int32(cx, argv[0], (int32_t *)&arg0);

ok &= jsval_to_int32(cx, argv[1], (int32_t *)&arg1);

JSB_PRECONDITION2(ok, cx, false, "js_cocos2dx_Event_constructor : Error processing arguments");

}while(0);

const int ret = cobj->sumTwonum(arg0,arg1);

jsval jsret = JSVAL_NULL;

jsret = int32_to_jsval(cx, ret);

JS_SET_RVAL(cx, vp, jsret);

return true;

}

return false;

}

在这个cpp里找到static JSFunctionSpec funcs[] ,这个数组里面添加一条如下一条数据

JS_FN("sumTwonum", js_cocos2dx_Sprite_sumTwonum, 2, JSPROP_PERMANENT | JSPROP_ENUMERATE),

这样就好了,用js可以直接调用,代码如下:

cc.log("bounding Success "+this.sprite.sumTwonum(1,1));

输出的结果是:

JS: bounding Success 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: