シヴァのブログ

UnityやUE4や趣味とかいろいろ...

「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:黒半透明の画像