【cocos2dx】モーダルレイヤーを作成する。

【cocos2dx】モーダルレイヤーを作成する。
   

レイヤーを重ねると、下の階層のあるメニュー等が反応をしてうまく動作がしないことがあります。
このような現象を防ぐために「モーダルレイヤー」を作成します。

「モーダルレイヤー」とは、簡単に言いますとレイヤーのタッチを優先的に受けることができるレイヤーのことです。
今回は、この「モーダルレイヤー」をcocos2dx Ver3.xで実装をする方法を紹介します。

2014 6 26 fdsas


モーダルレイヤー実装

レイヤーの初期化時に、下記コードを読み出せば「モーダルレイヤー」になります。

#define kModalLayerPriority -1


auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = [](Touch *touch,Event*event)->bool{
        
        
   return true;
        
};
auto dip = Director::getInstance()->getEventDispatcher();
dip->addEventListenerWithSceneGraphPriority(listener, this);
dip->setPriority(listener, kModalLayerPriority);


コードはタッチ処理を行う際に記述に、プライオリティを設定するメソッドを追加しているだけです。
これで完了です。

Ver2.xとの違い

今日、色々と試して見たところ、この記述だけで思ったような動きをしました。
Ver2.xの場合は以下の様なコードが必要でした。
//cocos2dx Ver2.x

#define kModalLayerPriority kCCMenuHandlerPriority-1
#define kModalLayerMenuPriority kCCMenuHandlerPriority-2


this->setTouchPriority(kModalLayerPriority);
this->setTouchEnabled(true);
this->setTouchMode(kCCTouchesOneByOne);


//メニューがある場合はこれも追加
menu->setTouchPriority(kModalLayerMenuPriority);


//タッチ処理の記述が必要
bool GameLayer::ccTouchBegan(CCTouch*touch, CCEvent*event){
    
    return true;
    
}

kCCMenuHandlerPriorityを利用しなくても良くなったこと。
また、Menuクラスにプライオリティを別途設定しなくなったこと。
この2点が変わっているのではないかと思います。

Related Posts Plugin for WordPress, Blogger...