「Cocos2D-x」モーダルレイヤー
モーダルレイヤーについてメモし忘れていたので書いておく。
「モーダルレイヤー」とは、レイヤーのタッチを優先的に受けることができるレイヤーのこと。
つまり、モーダルレイヤーより下に配置しているボタンを無効にすることができる。
そんなやつを作る。
以下がコード。
//========================================================================= // モーダルレイヤー作成 // 黒半透明の画像表示(モーダルレイヤーより下に配置しているボタンを無効にする) //========================================================================= Sprite* pModalLayerSprite = Sprite::create(IMAGE_FILE_NAME_COMMON_BG); pModalLayerSprite->setPosition(WINDOW_RIGHT * 0.5f, WINDOW_TOP * 0.5f); pModalLayerSprite->setColor(Color3B::BLACK); pModalLayerSprite->setOpacity(150); pModalLayerSprite->setTag(-10); this->addChild(pModalLayerSprite); // Listener作成 auto listener = EventListenerTouchOneByOne::create(); // 対象のイベントが実行された後、下位のイベントを発動されなくする listener->setSwallowTouches(true); // タッチイベント listener->onTouchBegan = [](Touch *touch, Event*event)->bool { return true; }; // Dispatcher作成 auto dispatcher = Director::getInstance()->getEventDispatcher(); // イベントリスナーの優先順位を設定(黒半透明の画像より下のものをタッチさせなくする) dispatcher->addEventListenerWithSceneGraphPriority(listener, pModalLayerSprite); dispatcher->setPriority(listener, -1);
// モーダルレイヤーを削除 Sprite* pReModalLayerSprite = (Sprite*)this->getChildByTag(-10); pReModalLayerSprite->removeFromParent();
※IMAGE_FILE_NAME_COMMON_BG:黒半透明の画像