cocos2d js 调用 c++ 版本cocos2d js 3.6
2015-11-09 13:05
471 查看
1、http://www.cocos2d-x.org/docs/manual/code-ide/function-guides/add-3rd-party-lib/binding-custom-class-to-js/zh
2、http://cocos2d.9tech.cn/news/2014/0106/39499.html
3、添加自定义类
:SwimAlg
4、添加自定义函数
:std::vector<Vec2>
test(std::vector<Vec2>
v){ return v;}5、添加自定义类型
std::vector<Vec2>
(因为自带的没有该类型转换):
在tools/bindings-generator/targets/spidermonkey/conversions.yaml
中添加代码
找到native_types:
在下面添加一行
"@std::vector<cocos2d::Vec2.*>.>":
"std::vector<cocos2d::Vec2>"
找到
# int to jsval 在下面添加一行
"@vector<cocos2d::Vec2.*>":
"${out_value}
= std_vector_ccvec2_to_jsval(cx,
${in_value})"
找到
# jsval to int 在下面添加一行
"@vector<cocos2d::Vec2.*>":
"ok &= jsval_to_std_vector_ccvec2(cx,
${in_value},
&${out_value})"
在frameworks/js-bindings/bindings/manual/js_manual_conversions中添加代码
2、http://cocos2d.9tech.cn/news/2014/0106/39499.html
3、添加自定义类
:SwimAlg
4、添加自定义函数
:std::vector<Vec2>
test(std::vector<Vec2>
v){ return v;}5、添加自定义类型
std::vector<Vec2>
(因为自带的没有该类型转换):
在tools/bindings-generator/targets/spidermonkey/conversions.yaml
中添加代码
找到native_types:
在下面添加一行
"@std::vector<cocos2d::Vec2.*>.>":
"std::vector<cocos2d::Vec2>"
找到
# int to jsval 在下面添加一行
"@vector<cocos2d::Vec2.*>":
"${out_value}
= std_vector_ccvec2_to_jsval(cx,
${in_value})"
找到
# jsval to int 在下面添加一行
"@vector<cocos2d::Vec2.*>":
"ok &= jsval_to_std_vector_ccvec2(cx,
${in_value},
&${out_value})"
在frameworks/js-bindings/bindings/manual/js_manual_conversions中添加代码
jsval std_vector_ccvec2_to_jsval( JSContext *cx, const std::vector<cocos2d::Vec2>& v) { JS::RootedObject jsretArr(cx, JS_NewArrayObject(cx, 0)); int i = 0; for (const cocos2d::Vec2 obj : v) { JS::RootedValue arrElement(cx); arrElement = vector2_to_jsval(cx, obj); if (!JS_SetElement(cx, jsretArr, i, arrElement)) { break; } ++i; } return OBJECT_TO_JSVAL(jsretArr); }
bool jsval_to_std_vector_ccvec2( JSContext *cx, JS::HandleValue vp, std::vector<cocos2d::Vec2>* ret){ JS::RootedObject jsobj(cx); bool ok = vp.isObject() && JS_ValueToObject( cx, vp, &jsobj ); JSB_PRECONDITION3( ok, cx, false, "Error converting value to object"); JSB_PRECONDITION3( jsobj && JS_IsArrayObject( cx, jsobj), cx, false, "Object must be an array"); uint32_t len = 0; JS_GetArrayLength(cx, jsobj, &len); for (uint32_t i=0; i < len; i++) { JS::RootedValue value(cx); if (JS_GetElement(cx, jsobj, i, &value)) { if (value.isObject()) { Vec2 v; ok = jsval_to_vector2(cx, value, &v); if (ok) { ret->push_back(static_cast<Vec2>(v)); } } else { JS_ReportError(cx, "not supported type in array"); return false; } } } return true; }5、以上可以在xcode上跑起来, 如果需要打包安卓包, 需要在Android.mk中添加
../../../js-bindings/cocos2d-x/cocos/user/SwimAlg.cpp\ ../../../custom/auto/jsb_SwimAlg.cpp \
$(LOCAL_PATH)/../../../js-bindings/cocos2d-x/cocos/user \
相关文章推荐
- 学习笔记Cocos2d-x之内存管理
- 使用Quick-Cocos2d-x开发植物大战僵尸04-展示植物卡片与僵尸
- 【Cocos2dx】用当前游戏状态作为暂停背景、纯文字纯图片按钮与不间断的重复动作序列
- 解决Cocos客户端libpng warning:iCCp:known incorrect sRGB profile
- cocos2d-x Programmers Guide v3.3 译本和阅读笔记(第4章:动作)
- 【Cocos2d-x 3.x】内存管理机制与源码分析
- Chipmunk引擎在Cocos2d-js中的使用
- cocos code ide--js 中获取cocostudio中按钮以及函数回调
- cocos2d-x游戏循环和日程安排
- cocos2dx 3.x UI之Button的初使用
- cocospod国外镜像源不能用
- cocos3 singleton
- 【Cocos2dx】根据窗口大小进行拉伸
- quick-cocos2d-x(一)开发环境配置
- cocos2d-x 3.x 创造物理世界
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(七)之士兵
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(六)之兵营塔
- cocos2d-x项目打包Android apk(二)
- 由quick2升级到cocos2d-x3.8的一些体会
- 解决cocos2dx CCArmature动画在部分型号的安卓手机上播放不正常的问题