Я работал над этим некоторое время, сейчас. Вы также можете назвать это «обратной маской» или «обратной маской».
По сути, я создаю окно просмотра внутри экранного объекта. Мне нужно, чтобы объекты на сцене, находящиеся под окном, могли взаимодействовать с мышью.
Это похоже на вопрос WPF: Использовать объект WPF, чтобы «пробить» дыру в другой? , у которой намного более короткая запись.
У меня есть класс с именем PunchOutShield
, который создает спрайт, который покрывает сцену (или некоторую желаемую область). Графический объект Sprite заполняется с использованием цвета и прозрачности модального экрана Flex. В результате экран выглядит как экран, который появляется за модальным всплывающим окном.
PunchOutShield
имеет метод с именем punch
, который принимает два аргумента: первый - это объект Shape, который определяет форму области пробивки; второй - это объект Point, который указывает, где расположить область сквозной пробивки.
Потребовалось некоторое экспериментирование, но я обнаружил, что могу успешно создать область вычеркивания (т. Е. Модальный экран не отображается в пределах заданной фигуры). Чтобы сделать это, я установил cacheAsBitmap
в true для Sprite, который используется для создания модального экрана, а также для объекта Shape, который добавляется в модальный экран Sprite's displayList.
Если я установил режим смешивания Shape на ERASE, на модальном экране будет создана полностью прозрачная область. Пока отлично.
Проблема в том, что Shape
не создает подкласса InteractiveObject, поэтому для него нет способа установить mouseEnabled = false
. И поэтому он предотвращает взаимодействие между мышью и любыми объектами, которые видны через область вычеркивания.
Кроме того, InteractiveObject недоступен для просмотра, поэтому я не могу понять, есть ли способ позаимствовать то, что он делает, для обеспечения функциональности mouseEnabled
и применить его к подклассу Shape.
Я пытался использовать другой объект Sprite, а не объект Shape, но смешивание не работает должным образом. Я не уверен, почему есть разница, но объект Shape, кажется, каким-то образом комбинируется с родительским Sprite, позволяя ERASE blendMode произвести желаемый эффект визуального отображения.
Это был бы не конец света, если бы мне пришлось нарисовать экран с помощью серии прямоугольников, чтобы область вычеркивания просто не рисовалась, но этот подход не сработает, если наша территория сложна. Или круглый.
Есть мысли об этом подходе или об альтернативном подходе?