最近好多同学在QQ群里问怎么在lua项目中使用DB(DrgonBones,龙骨),为了帮助更多的人,同时也好让更多的人跟容易使用DB,这里详细记录coco2dx-3.2版本对应DB的lua绑定。
首先要说明下,本文章对应的cocos2dx-3.2版本,其他cocos2dx-3.x版本跟3.2版本类似。
这里假设自己使用cocos命令行创建的lua项目,而且没有修改过目录结构,如果修改了请自行查找具体文件所在目录。

第一个假设,假设你已经知道如何配置cocos2dx-3.x的lua绑定,如果不知道的请移步bindings-generator查看README文件。

第二个假设,假设你已经使用cocos2dx-3.2创建了lua项目,名字为MyLuaGame,并且没有修改过里面的路径。 从GitHub上下载DragonBonesCPP项目,将dragonbones文件夹移动到MyLuaGame/frameworks/cocos2d-x/cocos/editor-support下。目录结构类似于这样:

gglua怎么创建文件夹 gg怎么导入lua_2d

添加db库

MyLuaGame项目。

右击解决方案

添加预处理宏

libDragonbonesliblua库添加预处理宏DRAGON_BONES_ENABLE_LUA=1

右击 libDragonbones => 属性 => 配置属性 => C/C++ => 预处理器 => 预处理定义 ,点击值后右边会有个下拉框,选择编辑,添加DRAGON_BONES_ENABLE_LUA=1并确认。

这里是libDragonbones的预处理宏,liblua的也类似。

gglua怎么创建文件夹 gg怎么导入lua_预处理_02

还有一种简便的方式,不需要去项目配置预定义宏,修改MyLuaGame/frameworks/cocos2d-x/cocos/editor-support/dragonbones/renderer/cocos2d-x-3.2/dbccMacro.h文件,

#define DRAGON_BONES_ENABLE_LUA 0中的0修改为1。

不过不建议直接修改db的源文件,因为将来升级db的时候还需要再次修改这里。 向liblua库中添加两条搜索路径

$(EngineRoot)cocos\editor-support\dragonbones
$(EngineRoot)cocos\editor-support\dragonbones\renderer\cocos2d-x-3.2

为MyLuaGame添加依赖项

MyLuaGame => 生成依赖项 => 项目依赖项...,勾选libDragonbones

右键MyLuaGame => 属性 => 通用属性 => 添加新引用 => 勾选 libDragonbones

修改conversions.yaml

文件路径:MyLuaGame/frameworks/cocos2d-x/tools/bindings-generator/targets/lua/conversions.yaml

ns_map: 下添加 "dragonBones::": "db."to_native:

LUA_FUNCTION : "${out_value} =  toluafix_ref_function(tolua_S,${arg_idx},0);ok &= ${out_value} != 0;"

cocos2dx3.2版本的完整文件从这里下载,其他版本的请自行修改。

添加dragonbones.ini

文件路径:MyLuaGame/frameworks/cocos2d-x/tools/tolua/dragonbones.ini
cocos2dx3.2版本的完整文件从这里下载,其他版本的请参照以下步骤修改:

复制cocos2dx.ini并命名为dragonbones.ini。
参照cocos2dx-3.2的dragonbones.ini修改。



修改genbindings.py

文件路径:MyLuaGame/frameworks/cocos2d-x/tools/tolua/genbindings.py

搜索'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'),

在这一段中添加'dragonbones.ini' : ('dragonbones', 'lua_dragonbones_auto'),.

完整代码段为:

cmd_args = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \
                    'cocos2dx_extension.ini' : ('cocos2dx_extension', 'lua_cocos2dx_extension_auto'), \
                    'cocos2dx_ui.ini' : ('cocos2dx_ui', 'lua_cocos2dx_ui_auto'), \
                    'cocos2dx_studio.ini' : ('cocos2dx_studio', 'lua_cocos2dx_studio_auto'), \
                    'cocos2dx_spine.ini' : ('cocos2dx_spine', 'lua_cocos2dx_spine_auto'), \
                    'cocos2dx_physics.ini' : ('cocos2dx_physics', 'lua_cocos2dx_physics_auto'), \
                    'cocos2dx_experimental_video.ini' : ('cocos2dx_experimental_video', 'lua_cocos2dx_experimental_video_auto'), \
                    'cocos2dx_experimental.ini' : ('cocos2dx_experimental', 'lua_cocos2dx_experimental_auto'), \
                    'cocos2dx_controller.ini' : ('cocos2dx_controller', 'lua_cocos2dx_controller_auto'), \
                    'dragonbones.ini' : ('dragonbones', 'lua_dragonbones_auto'), \
                    }
        target = 'lua'

cocos2dx3.2版本的完整文件从这里下载,其他版本的请自行修改。

生成lua绑定

dos2unix.exe文件,所以需要从这里下载,并放到

MyLuaGame/frameworks/cocos2d-x/tools/bindings-generator/tools/win32 目录下。

在命令行中运行MyLuaGame/frameworks/cocos2d-x/tools/tolua/genbindings.py`,不出意外就一次生成成功了。

如果你没有配置好或者没有成功生成绑定文件,可以自己下载ccos2dx-3.2版本的绑定文件。
lua_dragonbones_auto.hpplua_dragonbones_auto.cpp

注册libDragonbones到liblua

libLua/auto => 添加 => 现有项.. ,选择 MyLuaGame/frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/ 目录下的lua_dragonbones_auto.cpplua_dragonbones_auto.hpp文件。CCLuaStack.cpp中添加#include "lua_dragonbones_auto.hpp"头。

bool LuaStack::init(void)函数中添加register_all_dragonbones(_state);

最后

到这里就全部结束了,项目应该能编译通过并运行,之后就用lua写代码吧。