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;
}
}