стирать спрайт графику? - PullRequest
4 голосов
/ 06 мая 2009

Если у меня есть спрайт, с помощью которого я что-то нарисовал, как мне стереть часть того, что я нарисовал? Предпочтительно я мог бы использовать drawRect() с некоторой краской "alpha = 0".

Однако я не верю, что метод beginFill() позволяет вам установить цвет RGBA (как вы можете в bitmapData). Установка alpha = 0 в графическом методе beginFill() на самом деле ничего не делает - просто ничего не рисует.

В моем конкретном случае использования маскировка не подходит.

Кроме того, вызов clear() не является хорошим решением, поскольку он очищает все.

Ответы [ 3 ]

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

Вы можете достичь этого красиво, если вам не нужно иметь возможность взаимодействовать с какими-либо элементами под вашим Sprite.

Для этого

  1. создайте объект Shape в нужной форме и установите для его свойства cacheAsBitmap значение true
  2. установите свойство cacheAsBitmap вашего Sprite на true
  3. установите свойство blendMode вашей фигуры на BlendMode.ERASE
  4. добавить форму в список отображения вашего спрайта
5 голосов
/ 06 мая 2009

К сожалению, вы не можете делать то, что вы надеетесь сделать с классом Graphics. Хотя стирание может означать, что вы рисуете поверх того, что уже нарисовали цветом фона, я предполагаю, что вы надеетесь «нарисовать прозрачность» обратно на объект Graphics. Рисование с альфа 0 не означает «ничего» - вы просто не видите, что рисуете, потому что оно полностью прозрачно.

Это то, что вы получаете за работу с векторами, а не с растровыми изображениями. «Стереть» часть вектора означает, что вы создаете совершенно новый вектор, что потребует некоторых вычислений, а не просто установки некоторого пикселя в определенное значение цвета. Графика не обеспечивает такой расширенной функциональности, хотя вы, конечно, могли бы написать свои собственные функции для этого. : P

Один из способов - вместо этого использовать растровые изображения:
http://www.actionscript.org/forums/showthread.php3?t=187857
http://www.actionscripts.org/forums/showthread.php3?t=149021

Другой вопрос - можно ли по-другому реализовать то, что вы пытаетесь сделать; тот, который подойдет для использования clear ().

0 голосов
/ 06 мая 2009

Если вы хотите сохранить часть своего рисунка при стирании некоторых других частей, тогда единственным возможным путем будет рисование с использованием нескольких спрайтов. Создайте спрайт для каждой части чертежа, затем вы можете выбрать спрайт, который хотите стереть, и оставить остальные.

Кроме того, все, что у вас осталось, - это использовать битовые данные для копирования разделов, а затем после использования clear draw скопировать разделы обратно. (это было бы трудно реализовать в сложной усадьбе, попробуйте скопировать только сложную изогнутую область!)

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