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
首先用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
相关文章推荐
- cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding
- cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding
- cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsb
- cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding
- cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding
- cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding
- cocos2d-js-v3.0-rc2 中Javascript对数组的操作
- cocos2d-js 3.0 jsb环境调用底层java代码
- cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug
- JS调用XML绑定select(原创)
- Cocos2d-x Js Binding 的手动绑定实现
- 在cocos2d-js-v3.0 中使用cocostudio UI的正确方式
- Cocos2d-x3.0如何绑定调用lua回调函数
- 在cocos2d-js-v3.0 中使用cocostudio UI的正确方式
- Cocos2d-x Js Binding 的手动绑定实现
- JS和C# 互相调用与数据绑定问题
- 【cocos2d-x从c++到js】JS与C++的交互1——JS代码调用C++代码
- Cocos2d-JS-v3.0-alpha环境配置,用Cocos2d console维护使用
- Cocos2d-x Js Binding 的手动绑定实现
- 【cocos2d-x从c++到js】07:cxx-generator JS绑定工具 推荐