Lab

Cocos2d-x v3:シングルタッチを受け付ける

 Tag :  Published : 2014-8-23

Pocket

onTouchBegan、onTouchMoved、onTouchEndedを使用します。
画面のタッチ開始/タッチ中/タッチ終了それぞれの状態を確認する事ができます。
また、タッチした位置を座標で取得します。
> Ver2.x : 『シングルタッチを受け付ける』はこちら

シングルタッチを受け付ける 書き方その1

画面をタップした時、タップ中、タップを終了した時に、それぞれログが出るようにしてみます。

    //イベントリスナーを作成
    auto listener = EventListenerTouchOneByOne::create();
    
    //タッチ開始
    listener->onTouchBegan = [](Touch* touch, Event* event){
        log("TouchBegan");
        return true;
    };
    
    //タッチ中
    listener->onTouchMoved = [](Touch* touch, Event* event){
        log("TouchMoved");
    };
    
    //タッチ終了
    listener->onTouchEnded = [](Touch* touch, Event* event){
        log("TouchEnded");
    };

    //イベントリスナーを登録
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
    

シングルタッチを受け付ける 書き方その2

上記と同じ内容ですが、違う方法です。
onTouchBegan、onTouchMoved、onTouchEndedをそれぞれ関数として書きます。

    //イベントリスナーを作成
    auto listener = EventListenerTouchOneByOne::create();
    
    listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
    
    //イベントリスナーを登録
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
    

onTouchBegan、onTouchMoved、onTouchEndedをそれぞれ用意します。

bool HelloWorld::onTouchBegan(Touch *touch, Event *event)
{
    log("TouchBegan");
    return true;
}

void HelloWorld::onTouchMoved(Touch *touch, Event *event)
{
    log("Touch Moved!");
}

void HelloWorld::onTouchEnded(Touch *touch, Event *event)
{
    log("Touch Ended!");
}
    

タッチした位置の座標を取得

書き方その1のonTouchBeganを利用して、タッチした場所をログで出してみます。

    listener->onTouchBegan = [](Touch* touch, Event* event){
        Point touchPoint = Vec2(touch->getLocationInView().x, touch->getLocationInView().y);
        log("X:%f、Y:%fをタッチしました", touchPoint.x, touchPoint.y);
        
        return true;
    };
    

pageTop