void
ArmatureNode::registerMovementEventHandler(
int
handler)
{
unregisterMovementEventHandler();
//移除之前注冊的監聽
_movementHandler = handler;
//緩存lua函數的引用 這個后邊說
auto dispatcher = getCCEventDispatcher();
auto f = [
this
](cocos2d::EventCustom *event)
//注冊c代碼形式的回調 這里用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調用lua里的函數 最后一個參數設置參數個數
stack->executeFunctionByHandler(_movementHandler, 3);
};
dispatcher->addCustomEventListener(dragonBones::EventData::COMPLETE, f);
}
void
ArmatureNode::unregisterMovementEventHandler(
void
)
{
if
(0 != _movementHandler)
{
cocos2d::LuaEngine::getInstance()->removeScriptHandler(_movementHandler);
//移除lua函數的綁定
_movementHandler = 0;
}
}