Lab

Cocos2d-x v3:イベントの貫通を制御する

 Tag :  Published : 2014-8-25

Pocket

setSwallowTouchesを使用します。
複数あるイベントリスナーのうち、優先順位の高いイベントだけを実行します。

1.複数のイベントを設定

イベントリスナーを2つ作成します。優先順位は、listener1、listener2の順に設定しています。

    //1つめのイベントリスナーを作成
    auto listener1 = EventListenerTouchOneByOne::create();

    listener1->onTouchBegan = [](Touch* touch, Event* event){
        log("listener1");
        return true;
    };
    
    //2つめのイベントリスナーを作成
    auto listener2 = EventListenerTouchOneByOne::create();

    listener2->onTouchBegan = [](Touch* touch, Event* event){
        log("listener2");
        return true;
    };

    //2つのイベントリスナーを登録
    this->getEventDispatcher()->addEventListenerWithFixedPriority(listener1, 1);
    this->getEventDispatcher()->addEventListenerWithFixedPriority(listener2, 2);
    

これを実行すると以下のようなログが表示され、listener1とlistener2の両方が実行されている事が分かります。

    cocos2d: listener1
    cocos2d: listener2
    

2.優先順位の高いイベントだけを実行する

上記のコードに1行足してみます。

    listener1->setSwallowTouches(true);
    

setSwallowTouchesをtrueにすると、対象のイベントが実行された後、下位のイベントは発動されなくなります。
実行すると以下のようなログが表示され、listener1だけが実行されている事が分かります。

    cocos2d: listener1
    

pageTop