Cocos2d-x v3.2 タッチイベントのチュートリアル
… v2.x系と全然違う… ^^;
とりあえず試してみました。
Cocos2d-x v3 C++ Tutorial 35 – Setting Up Single Touch Events
https://www.youtube.com/watch?v=9MU13k3f_jI
Cocos2d-x v3 C++ Tutorial 36 – Touch Began Using onTouchBegan
https://www.youtube.com/watch?v=QiXNP2X-kIk
Cocos2d-x v3 C++ Tutorial 37 – Touch Moved Using onTouchMoved
https://www.youtube.com/watch?v=Vgtu5SJUnrU
Cocos2d-x v3 C++ Tutorial 38 – Touch Ended Using onTouchEnded
https://www.youtube.com/watch?v=VDrzhYNTpjU
まずは ヘッダに関数の定義を …
virtual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event); virtual void onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event); virtual void onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event); //virtual void onTouchCancelled(cocos2d::Touch *touch, cocos2d::Event *event);
親の Layer.h から定義をコピーしたらいいかなーと ^^
cppファイルの方にメソッドを実装
bool HelloWorld::onTouchBegan(Touch *touch, Event *event) { CCLOG("%s x:%f, y:%f", __PRETTY_FUNCTION__, touch->getLocation().x, touch->getLocation().y); //trueを返さないと Moved, Ended が来ないよ ^^; return true; } void HelloWorld::onTouchMoved(Touch *touch, Event *event) { CCLOG("%s x:%f, y:%f", __PRETTY_FUNCTION__, touch->getLocation().x, touch->getLocation().y); } void HelloWorld::onTouchEnded(Touch *touch, Event *event) { CCLOG("%s x:%f, y:%f", __PRETTY_FUNCTION__, touch->getLocation().x, touch->getLocation().y); }
最後になっちゃったけど、イベントリスナーの登録…
ここが一番変わった感じかなー、自分はとりあえず覚えるように打つしか… ^^;
//タッチイベント { auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); }
うーん、この setSwallowTouches … いったい何ぞや… ^^; と、ググってみると、
これをtrueにしておくと、そのイベントリスナーが通知を受け取った時点で下位のリスナーには通知されなくなるみたい…
この辺は試し試しで ^^;