Есть какие-нибудь мысли о том, как создать настоящую «изюминку» в спрайте? - PullRequest
2 голосов
/ 15 июня 2009

Я работал над этим некоторое время, сейчас. Вы также можете назвать это «обратной маской» или «обратной маской».

По сути, я создаю окно просмотра внутри экранного объекта. Мне нужно, чтобы объекты на сцене, находящиеся под окном, могли взаимодействовать с мышью.

Это похоже на вопрос 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 произвести желаемый эффект визуального отображения.

Это был бы не конец света, если бы мне пришлось нарисовать экран с помощью серии прямоугольников, чтобы область вычеркивания просто не рисовалась, но этот подход не сработает, если наша территория сложна. Или круглый.

Есть мысли об этом подходе или об альтернативном подходе?

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Кажется, что рисование нескольких фигур между beginFill () и endFill () и использование результата в качестве маски может дать желаемый эффект. Смотрите также: http://www.galaxygoo.org/blogs/2007/09/shapes_unexpectedly_cancelling_1.html

0 голосов
/ 15 июня 2009

Есть ли причина, по которой вы не можете использовать свойство mask DisplayObject? Это должно позволить вам сделать дыру в любом экранном объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...