void
ArmatureNode::registerMovementEventHandler(
int
handler)
{
unregisterMovementEventHandler();
//移除之前注冊(cè)的監(jiān)聽
_movementHandler = handler;
//緩存lua函數(shù)的引用 這個(gè)后邊說
auto dispatcher = getCCEventDispatcher();
auto f = [
this
](cocos2d::EventCustom *event)
//注冊(cè)c代碼形式的回調(diào) 這里用function做
{
auto eventData = (dragonBones::EventData*)(event->getUserData());
auto type = (
int
) eventData->getType();
auto movementId = eventData->animationState->name;
auto lastState = eventData->armature->getAnimation()->getLastAnimationState();
auto stack = cocos2d::LuaEngine::getInstance()->getLuaStack();
stack->pushObject(
this
,
"db.ArmatureNode"
);
stack->pushInt(type);
stack->pushString(movementId.c_str(), movementId.size());
//通過LuaStack調(diào)用lua里的函數(shù) 最后一個(gè)參數(shù)設(shè)置參數(shù)個(gè)數(shù)
stack->executeFunctionByHandler(_movementHandler, 3);
};
dispatcher->addCustomEventListener(dragonBones::EventData::COMPLETE, f);
}
void
ArmatureNode::unregisterMovementEventHandler(
void
)
{
if
(0 != _movementHandler)
{
cocos2d::LuaEngine::getInstance()->removeScriptHandler(_movementHandler);
//移除lua函數(shù)的綁定
_movementHandler = 0;
}
}