Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Реализация для битмап hitArea + маска (http://www.flasher.ru/forum/showthread.php?t=160361)

marat_sa 11.07.2011 23:45

Реализация для битмап hitArea + маска
 
Добрый вечер.

Возникла такая задача:
Есть исходная битмапа - некая внешняя PNG картинка c альфа каналом.
Нужно как-то задать ей кастомную область реагирования на события мыши вне зависимости от параметров исходной битмапы.

Возникла идея сделать для этой картинки что то наподобие маски - ее дубликат состоящий из двух цветов. Один цвет - активная область картинки для событий мыши, второй цвет - неактивная.
В итоге загружаем картинку + эту двухцветную маску, и нужно как-то исходной картинке назначить областью реагирования нашу двухцветную маску с учетом цвета пикселов. Типа как hitArea для Sprite, но весь контент должен быть внешним, из битмап.

Если неактивную область маски сделать прозрачной, то можно заюзать hitTest в BitmapData, но для этого маска должна лежать на сцене и быть видимой. Вобщем что-то тупик какой-то.

Может можно все сделать проще? Подскажите пожалуйста.

RaVeN-Nikma 12.07.2011 00:06

Из тонны, текста я понял, что нужно сделать hitTest для подгружаемой png? Щелкнул мышью по картинке, попал в прозрачность = false, попал в рисунок = true. (просто хочу прояснить картину). Если все так, то можно использовать getPixel

etc 12.07.2011 00:11

Цитата:

Сообщение от marat_sa (Сообщение 1010830)
можно заюзать hitTest в BitmapData, но для этого маска должна лежать на сцене и быть видимой

Мммм, зачем лежать на сцене? Это метод BitmapData, его работоспособность не зависит от того, лежит ли битмап на сцене или нет.
И да, getPixel32 быстрее будет, чем hitTest.

marat_sa 12.07.2011 01:14

Цитата:

Из тонны, текста я понял, что нужно сделать hitTest для подгружаемой png? Щелкнул мышью по картинке, попал в прозрачность = false, попал в рисунок = true.
Данный функционал обеспечивается и простым hitTest с нужным порогом альфа...
Нужен именно чтобы кастомный hitTest был, вне зависимости от альфы исходной картинки. Т.е. исходная может быть в каком-то месте прозрачна, но там она должна быть активна.

Цитата:

Мммм, зачем лежать на сцене?
да, на сцену ложить не нужно для hitTest, это я погорячился...

Да, вот тут тоже подумали с товарищем... Помещаем исходную картинку на сцену, отлавливаем в ней событие мыши, снимаем Point с нужными координатами и проецируем данную точку на битмапу-маску. А там уже с помощью getPixel(32) делаем проверку на то, куда мы попали. Нормальный способ же? Ничего вроде сильно страшного не делаем...

Wolsh 12.07.2011 01:42

Так и не понял, при чем тут вообще битмап. Есть картинка, а есть "кнопка" НАД картинкой. На кнопке нарисовали все что надо с нулевой альфой и ловите клики с нее, а не с картинки.

Добавлено через 4 минуты
А, понял. "Маска" у вас не может быть векторной, загружается вместе с картинкой.. тогда конечно, взяли координаты клика и сравнили с пикселем "маски" (я бы сказал "карты") И незачем 32бита, просто черный/белый двухцветный гиф, весит копейки.

marat_sa 12.07.2011 03:06

Да, так и сделаю. Всем спасибо.


Часовой пояс GMT +4, время: 03:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.