已有cocos2dx 3.x 项目中使用lua

2025-04-28 04:45:44
推荐回答(1个)
回答1:

这里假设已经建好了cocos2dx的lua项目,将DB放到了指定目录,并且lua绑定已经做完了。如果以上步骤没有做完,请看这里。

DB在lua项目中的使用和在C++项目中使用基本一样,这里列下不同点:
事件侦听方式修改
数据类在lua中基本得不到
某些带有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)