X

如何在lua项目中使用dragonbones

由于热更新的原因,现在好多cocos2dx项目都会使用lua/js脚本来开发,这篇讲下如何在cocos2dx-lua项目中使用DB(dragonbones,龙骨)。 这里假设已经建好了cocos2dx的lua项目,将DB放到了指定目录,并且lua绑定已经做完了。如果以上步骤没有做完,请看这里

DB在lua项目中的使用和在C++项目中使用基本一样,这里列下不同点:

  1. 事件侦听方式修改
  2. 数据类在lua中基本得不到
  3. 某些带有void*的接口在lua中不可用

虽然有些API在lua中不可用,但是基本使用上没有大问题。 所有DB的类都映射到db对象中,比如dragonbones::DBCCArmatureNode映射为db.DBCCArmatureNode

创建DBCCArmatrueNode

下面创建一个"dragonBoy"的示例并播放walk动作,代码很简单,跟C++中使用一样,只是编写方式变了下。

local factory = db.DBCCFactory:getInstance()
local dbnode = factory:buildArmatureNode("dragonBoy")
dbnode:getAnimation():gotoAndPlay("walk")
addChild(dbnode)

添加事件

添加事件跟C++中不一样了,在lua中事件被分成了两类:动画事件帧事件。 其实还有DB还支持声音事件,而且C++中也实现了,只是感觉声音事件没有那么重要,完全可以用帧事件代替,所以就没有提供帧事件的lua接口。

-- @param table event
--     db.DBCCArmature armature
--     db.DBCCArmatureNode armatureNode
--     int type            对应于dragonbones::EventData::EventType
--     string boneName     仅在帧事件中有效
--     string animationName
--     string frameLabel   仅在帧事件中有效
--     bool isLastAnimation
local function onEvent( event ) end

-- 注册动画事件
armatureNode:registerAnimationEventHandler(onEvent)
-- 注册帧事件
armatureNode:registerFrameEventHandler(onEvent)

This post was last modified on 2019 年 02 月 25 日 01:34

View Comments (6)

  • 新版本的dragonbones cpp改动比较大,博主能否更新下?自己尝试了下,都不成功T_T,主要是lua绑定这块的

  • 新手求教,动画数据文件怎么加载呢?设计骨骼动画时使用官方的 dragonbones导出的json或者xml文件

  • 我看到你的C++版本里用的是customevent,但是lua你懂的,,不给用。。。虽然我自己写了cpp到lua的customevent,但是我是写在表层工程了,要挪到这里还是有点蛋疼的。。。。

  • 请问registerAnimationEventHandler在最新的版本是被移除了么?我绑定到lua后所有逻辑全部正常唯独看不到registerAnimationEventHandler方法。。。找了半天也没找到其他类似方法,我不想改底层啊

This website uses cookies.