cocos2d-x 3.x LuaBinding之LUA_FUNCTION(只为记录)
来源:互联网 发布:淘宝衣服洗过会被发现 编辑:程序博客网 时间:2024/05/23 01:24
cocos2d-x 3.x LuaBinding之LUA_FUNCTION
转载至 http://www.cocoachina.com/bbs/read.php?tid-331648.html
用cocos2d-x+lua很久了,一直以来都在学习,相信很多童鞋都会有一个问题,就是从2.x转到3.x的时候会有点不适应, 那就是tolua里面不能直接使用LUA_FUNCTION了。之前我也在纠结过, 后面看过很多大神的帖子, 都是使用ScriptHandlerMgr代替,我也用过, 但是感觉不是特别的方便, 然后我就折腾了一下tolua的转换, 没想到真被我找到方法了。
首先大家先找到这个文件: conversions.yaml。
不出意外的话, 应该在这个路径下 /frameworks/cocos2d-x/tools/bindings-generator/targets/lua/conversions.yaml
打开这个文件之后, 大家会看到定义了很多内容(大家都不用管), 找到 to_native: 节点, 看到这个节点我相信你也就明白是如何绑定c++类了吧。 没错, 就是你想的这样,在这个节点下面加入一句话就ok了, 这句话就是:
"LUA_FUNCTION": "${out_value} = toluafix_ref_function(tolua_S, ${arg_idx}, 0); ok &= ${out_value} >= 0"
加入之后应该是这样的
完成之后你就可以写自己的类
#include "cocos2d.h"
#include "CCLuaEngine.h"
USING_NS_CC;
class MyClass:public cocos2d::Ref{
public:
MyClass();
MyClass();
void test(LUA_FUNCTION nHandler);
}
然后编写ini文件 和genbindings.py文件, 运行导出后就可以在lua里面直接使用了。
cc.MyClass:test(function()
end)
转载至 http://www.cocoachina.com/bbs/read.php?tid-331648.html
用cocos2d-x+lua很久了,一直以来都在学习,相信很多童鞋都会有一个问题,就是从2.x转到3.x的时候会有点不适应, 那就是tolua里面不能直接使用LUA_FUNCTION了。之前我也在纠结过, 后面看过很多大神的帖子, 都是使用ScriptHandlerMgr代替,我也用过, 但是感觉不是特别的方便, 然后我就折腾了一下tolua的转换, 没想到真被我找到方法了。
首先大家先找到这个文件: conversions.yaml。
不出意外的话, 应该在这个路径下 /frameworks/cocos2d-x/tools/bindings-generator/targets/lua/conversions.yaml
打开这个文件之后, 大家会看到定义了很多内容(大家都不用管), 找到 to_native: 节点, 看到这个节点我相信你也就明白是如何绑定c++类了吧。 没错, 就是你想的这样,在这个节点下面加入一句话就ok了, 这句话就是:
"LUA_FUNCTION": "${out_value} = toluafix_ref_function(tolua_S, ${arg_idx}, 0); ok &= ${out_value} >= 0"
加入之后应该是这样的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
to_native:
# lua to native
int
:
"ok &= luaval_to_int32(tolua_S, ${arg_idx},(int *)&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"unsigned int"
:
"ok &= luaval_to_uint32(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"unsigned char"
:
"ok &= luaval_to_uint16(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
short:
"ok &= luaval_to_int32(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"unsigned short"
:
"ok &= luaval_to_ushort(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
char:
"ok &= luaval_to_int32(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
bool
:
"ok &= luaval_to_boolean(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
float
:
"ok &= luaval_to_number(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
double:
"ok &= luaval_to_number(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
long
:
"ok &= luaval_to_long(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
ssize_t:
"ok &= luaval_to_ssize(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"unsigned long"
:
"ok &= luaval_to_ulong(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"long long"
:
"ok &= luaval_to_long_long(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"std::string"
:
"ok &= luaval_to_std_string(tolua_S, ${arg_idx},&${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"String*"
:
"std::string ${out_value}_tmp; ok &= luaval_to_std_string(tolua_S, ${arg_idx}, &${out_value}_tmp, \"${lua_namespaced_class_name}:${func_name}\"); ${out_value} = cocos2d::String::create(${out_value}_tmp)"
"char*"
:
"std::string ${out_value}_tmp; ok &= luaval_to_std_string(tolua_S, ${arg_idx}, &${out_value}_tmp, \"${lua_namespaced_class_name}:${func_name}\"); ${out_value} = ${out_value}_tmp.c_str()"
"Point"
:
"ok &= luaval_to_point(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Vec2"
:
"ok &= luaval_to_vec2(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Vec3"
:
"ok &= luaval_to_vec3(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Vec4"
:
"ok &= luaval_to_vec4(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Rect"
:
"ok &= luaval_to_rect(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Size"
:
"ok &= luaval_to_size(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Color4B"
:
"ok &=luaval_to_color4b(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Color4F"
:
"ok &=luaval_to_color4f(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Color3B"
:
"ok &= luaval_to_color3b(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"PhysicsMaterial"
:
"ok &= luaval_to_physics_material(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Array*"
:
"ok &= luaval_to_array(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Dictionary*"
:
"ok &= luaval_to_dictionary(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"AffineTransform"
:
"ok &= luaval_to_affinetransform(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"FontDefinition"
:
"ok &= luaval_to_fontdefinition(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"@Vector<.*>"
:
"ok &= luaval_to_ccvector(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"@Map<std::basic_string.*>"
:
"ok &= luaval_to_ccmap_string_key(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Value"
:
"ok &= luaval_to_ccvalue(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"ValueMap"
:
"ok &= luaval_to_ccvaluemap(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"ValueMapIntKey"
:
"ok &= luaval_to_ccvaluemapintkey(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"ValueVector"
:
"ok &= luaval_to_ccvaluevector(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"@vector<std::basic_string.*>"
:
"ok &= luaval_to_std_vector_string(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"@vector<int.*>"
:
"ok &= luaval_to_std_vector_int(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"kmMat4"
:
"ok &= luaval_to_kmMat4(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"Mat4"
:
"ok &= luaval_to_mat4(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"BlendFunc"
:
"ok &= luaval_to_blendfunc(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"_ttfConfig"
:
"ok &= luaval_to_ttfconfig(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"MeshVertexAttrib"
:
"ok &= luaval_to_mesh_vertex_attrib(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"@vector<float.*>"
:
"ok &= luaval_to_std_vector_float(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"@vector<unsigned short.*>"
:
"ok &= luaval_to_std_vector_ushort(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"AnimationInfo"
:
"ok &= luaval_to_animationInfo(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
"TexParams"
:
"ok &= luaval_to_texparams(tolua_S, ${arg_idx}, &${out_value}, \"${lua_namespaced_class_name}:${func_name}\")"
object
:
"ok &= luaval_to_object<${arg.to_string($generator).replace(\"*\", \"\")}>(tolua_S, ${arg_idx}, \"${scriptname}\",&${out_value})"
"LUA_FUNCTION"
:
"${out_value} = toluafix_ref_function(tolua_S, ${arg_idx}, 0); ok &= ${out_value} >= 0"
from_native:
# native to lua
int
:
"tolua_pushnumber(tolua_S,(lua_Number)${in_value})"
完成之后你就可以写自己的类
#include "cocos2d.h"
#include "CCLuaEngine.h"
USING_NS_CC;
class MyClass:public cocos2d::Ref{
public:
MyClass();
MyClass();
void test(LUA_FUNCTION nHandler);
}
然后编写ini文件 和genbindings.py文件, 运行导出后就可以在lua里面直接使用了。
cc.MyClass:test(function()
end)
0 0
- cocos2d-x 3.x LuaBinding之LUA_FUNCTION(只为记录)
- Cocos2d-x 3.x学习记录
- 我在Cocos2d-x luabinding box2d时挖到过的坑
- cocos2d-x 3.x之定时器
- cocos2d-x 3.x之动作
- cocos2d-x 3.x之动画
- cocos2d-x 3.x之触摸事件
- cocos2d-x 3.x之动画
- Cocos2d-x 3.x 之 坐标系
- cocos2d-x 3.x学习之SpriteFrameCache
- cocos2d-x 3.x学习之ShowAction
- cocos2d-x 3.x学习之FadeAction
- cocos2d-x 3.x学习之TintAction
- cocos2d-x 3.x学习之MoveAction
- cocos2d-x 3.x学习之JumpAction
- cocos2d-x 3.x学习之ScaleAction
- cocos2d-x 3.x学习之RotateAction
- cocos2d-x 3.x学习之ActionCombination
- Android(Lollipop/5.0) Material Design(二) 入门指南
- C#系统注销功能
- Android 开发笔记——通过 Intent 传递类对象
- 运维工程师必备技能
- 个人博客
- cocos2d-x 3.x LuaBinding之LUA_FUNCTION(只为记录)
- javaday23-IO练习题
- android scrollview嵌套listView和gridView的问题。
- Linux指令--文件和目录属性
- dubbox学习之路(一)
- 【异常/错误处理系列】C++如何实现Try/Catch
- MySQL数据库内置函数
- Android 5.x Theme 与 ToolBar 实战
- C++ 回调函数理解