Lab

Cocos2d-x v3:イベントリスナーの優先順位の設定1

 Tag :  Published : 2014-8-25

Pocket

addEventListenerWithSceneGraphPriorityを使用します。
イベントリスナーの優先順位を設定します。

スプライトの順番を参照してイベントリスナーの優先順位を設定する

スプライトとイベントリスナーをそれぞれ2つずつ作成して実験してみます。

    //1つめのスプライトを作成
    Size s = Director::getInstance()->getVisibleSize();
    auto spr1 = Sprite::create("1.png");
    spr1->setPosition(Vec2(s.width/2-50, s.height/2+50));
    addChild(spr1);
    
    //2つめのスプライトを作成
    auto spr2 = Sprite::create("2.png");
    spr2->setPosition(Vec2(s.width/2+50, s.height/2-50));
    addChild(spr2);
    
    //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つのイベントリスナーを登録します。引数に先ほど作成したスプライトが指定されています。

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

これを実行してみると、ログはこんな感じです。

    //画面をタップ時のログ
    cocos2d: listener2
    cocos2d: listener1
    

次に引数を逆にしてみます。

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

今度は、ログはこんな感じになります。

    //画面をタップ時のログ
    cocos2d: listener1
    cocos2d: listener2
    

2つのスプライトのうち手前にあるのはspr2です。
そのため、引数にspr2を持つイベントが常に優先されています。

pageTop