![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 43
|
Вывожу на экран несколько картинок, затем ставлю событие клик на контейнеры, содержащий картинки.
Проблема в том, что картнки перекрываются так, что под прозрачной областью одной картинки может лежать непрозрачная область другой. Соответственно при клике на такой области возникает событие клик на картинке с прозрачной областью. Можно ли сделать, чтобы событие возникало на картинке с непрозрачной областью? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Можно попробовать найти на картинке все прозрачные пиксели, создать из них маску, наложить на картинку…
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 223
|
Решение с масочкой - очень не простое...
Первый вариант - для каждого непрозрачного пикселя картинки рисовать на маске зарашенный квадратик 1x1. Кроме того, что сам процес создания такой маски займёт прилично времени, из-за неё ещё и сильно просядет производительность, потому что, насколько я понял, пересекающиеся заливки одного цвета объединяются только в оболочке. При рисовании в run-time получится маска состоящая из нескольких тысяч (может даже и сотен тысяч) отдельных квадратиков. Другой вариант - найти пограничные пиксели и прочертить контур чисто по ним. Но и сам поиск таких пикселей не прост, и есть риск получить нежелательные пересечения, в результате которых заливка получится неправильной. Вот если бы можно было узнать все мувики, которые пересекают определённую точку экрана... P.S. А хотя вру... Вторым способом построить не так сложно. Бежим по всем пикселям. Если пиксель не прозрачный, то сравниваем его с соседями. Если сосед прозрачный, рисуем между ними отрезок длиной 1 пиксель. Когда пробежим по всем пикселям, по идее должна получится фигура, которая нормально закрасится. Последний раз редактировалось WindWalker; 05.07.2007 в 16:20. |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 223
|
Тогда можно использовать такой подход (тоже правда геморройный):
при обработке клика, проверяем пиксель в который кликнули. Если он прозрачный, находим спрайт или мувик находящийся ниже и отправляем событие ему. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|