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にしておくと、そのイベントリスナーが通知を受け取った時点で下位のリスナーには通知されなくなるみたい…
この辺は試し試しで ^^;