Как создать прозрачный слой, который поглощает прикосновения или препятствует их прохождению?

У меня есть слой (базовый слой), на котором есть несколько кнопок. Иногда я хотел бы показывать модальные диалоговые окна на полупрозрачном слое, при отображении которых пользователь не должен иметь возможности щелкнуть что-либо ниже полупрозрачного слоя, т.е. они не должны иметь возможности нажимать кнопки на базовом слое.

Итак, как заставить слой поглощать все эти прикосновения? Прямо сейчас, если я нажму где-нибудь на полупрозрачном слое, а на слое ниже есть кнопка, кнопка будет нажата? Есть ли какой-то флаг, который должен быть установлен?


person Rahul Iyer    schedule 20.07.2017    source источник


Ответы (1)


Вы можете добавить сенсорный прослушиватель для своего слоя.

 void YourLayerYouWantToSwallowTouches::addEvents() {

    auto listener = cocos2d::EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);

    listener->onTouchBegan = [&](cocos2d::Touch* touch, cocos2d::Event* event) {

        if (this->getBoundingBox().containsPoint(touch->getLocation())) {

            //touchBegan(touch); // You can call touchBegan() for that layer here
            return true; // to indicate that we have consumed touch.
        }
        return false; // we did not consume touch, pass thru.
    };

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}
person Darvydas    schedule 20.07.2017