タッチイベントの登録と削除 [EventListener]
cocos2d-x を version2.2.3からversion3.2rc0に移行してみました
タッチイベントについて大幅な変更があったのでメモしておきます
TestLayer.h
v2.2.3
public: virtual bool ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *event); virtual void ccTouchMoved(cocos2d::CCTouch *touch, cocos2d::CCEvent *event); virtual void ccTouchEnded(cocos2d::CCTouch *touch, cocos2d::CCEvent *event); virtual void ccTouchCancelled(cocos2d::CCTouch *touch, cocos2d::CCEvent *event);
v3.2rc0
private: cocos2d::EventListenerTouchOneByOne *eventListener; public: bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event); void onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event); void onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event); void onTouchCancelled(cocos2d::Touch *touch, cocos2d::Event *event);
TestLayer.cpp - タッチイベントの登録
v2.2.3
void TestLayer::onEnter() { Node::onEnter(); setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); }
v3.2rc0
void TestLayer::onEnter() { Node::onEnter(): auto dispatcher = Director::getInstance()->getEventDispatcher(); eventListener = EventListenerTouchOneByOne::create(); eventListener->onTouchBegan = CC_CALLBACK_2(TestLayer::onTouchBegan, this); eventListener->onTouchMoved = CC_CALLBACK_2(TestLayer::onTouchMoved, this); eventListener->onTouchEnded = CC_CALLBACK_2(TestLayer::onTouchEnded, this); eventListener->onTouchCancelled = CC_CALLBACK_2(TestLayer::onTouchCancelled, this); dispatcher->addEventListenerWithSceneGraphPriority(eventListener, this); }
TestLayer.cpp - タッチイベントの削除
v2.2.3
void TestLayer::Hoge() { setTouchEnabled(false); }
v3.2rc0
void TestLayer::Hoge() { auto dispatcher = Director::getInstance()->getEventDispatcher(); dispatcher->removeEventListener(eventListener); // すべてのタッチイベントを削除する場合はこっち // dispatcher->removeEventListenersForTarget(this); }