Edited at

cocos2d-x v3のEventListener登録、解除

More than 3 years have passed since last update.


タッチイベント

登録


TestNode.cpp

auto listener = EventListenerTouchOneByOne::create();

listener->setSwallowTouches(true);
listener->onTouchBegan = CC_CALLBACK_2(TestNode::onTouchBegan, this);
listener->onTouchEnded = CC_CALLBACK_2(TestNode::onTouchEnded, this);
getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

解除

getEventDispatcher()->removeEventListenersForTarget(this);

NodeのデストラクタでremoveEventListenersForTarget(this)が呼ばれるため、

通常は自分で解除する必要はない。


カスタムイベント

登録

_listenerCustom = getEventDispatcher()->addCustomEventListener("test", CC_CALLBACK_1(TestNode::customEventCallback, this));

解除

getEventDispatcher()->removeEventListener(_listenerCustom);

この方法で登録したカスタムイベントリスナーはremoveEventListenersForTargetでは解除されないので、addCustomEventListenerが返すEventListenerCustomのポインタを持っておいて、解除する時に指定する。

または、EventListenerCustomを作ってから、addEventListenerWithSceneGraphPriorityで登録すれば、removeEventListenersForTargetで解除されるようになり、自分で解除する必要がなくなる。

EventListenerCustom* listenerCustom =

EventListenerCustom::create("test2", [](EventCustom* event){
CCLOG("test2");
});
_eventDispatcher->addEventListenerWithSceneGraphPriority(listenerCustom, this);