|
|
|||||
Ловите клики от stage, и затем определяйте, на что нажал пользователь.
1) Проходимся по дисплей листу от ближайших до самых дальних элементов. 2) Если текущий пиксель существует на текущем элементе и он прозрачный - пропускаем элемент, иначе - возвращаем элемент.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
2 не совсем понял. Да и наличие битмапы можно не рассматривать.
Итак. Вот схема: 1 грузится картинка с прозрачностью. 100% альфа там где прозрачно, полутонов нет. 2. Создается bitmapData с прозрачностью. В неё рисуется наша картинка (отсутпая от схемы подозреваю здесь костыль, который рисует как бы второй слой альфы я хз как это выразить) 3. создается bitmap с предыдушей -датой (шаг 2). 4. битмап помещается в спрайт. 5. слушается клик на спрайте ну а дальше само решение должно быть. на сцене создается несколько экземпляров этого класса с перекрытием но работает только верхние не закрытые. Может конечный контейнер работает, может еще что честно мозг выкипел давно и уже не соображаю. но по схеме же что раньше рисовал все должно быть понятно. Оба круга кликабельны должны быть то есть зависит от пользователя. И да твоё первое утверждение верно. в общем как так Добавлено через 1 минуту Цитата:
Добавлено через 4 минуты на самом деле думал на эту тему, только не бегать по листу а ловить это событие внутри отдельного элемента и проверять его ли территория была под воздействием и какая она, но тогда боюсь что клики на пересечениях картинок будут вызывать событие во всех кто в данной точке не прозрачен. Добавлено через 8 минут То как я описываю построение не критично предложите свой рабочий вариант, может просто перекрою проект. Обязательное требование чтобы прокликивалось насквозь все прозрачное, а реагировать должен только предмет где клик пошел в непрозрачную область, и только один, по умолчанию верхний. |
|
|||||
Изобрести велосипед.
Нет, нужно проходиться по элементам от ближайшего до самого дальнего, находить первый, попавший в точку и затем диспатчить у него клик.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
это придется делать на уровне контейнера всех элементов, разве нет?
|
|
|||||
Цитата:
Вот, собственно чуть-чуть модифицированный вариант, если он вам подходит, то всё что там реализовано - я писал раннее здесь и здесь.
__________________
ЛОДКИ |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Цитата:
Цитата:
Добавлено через 2 минуты FlashRus, кажется я понимаю в чем наше недопонимае. твоя Битмапа уже с дырками, а у меня их нет. Как-то так Добавлено через 3 минуты и еще. Если mouseenable = false разве такой обьект примет потом движение мыши, чтобы снова стало тру? Добавлено через 14 минут что и следовало ожидать import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.BlendMode; import flash.net.URLRequest; import flash.display.PixelSnapping; /** * ... * @author @PsYcHoTeChNiK */ public class Circles extends Sprite { private var loadImage: Loader = new Loader(); private var imgbtm: Bitmap; private var imgbtmdt: BitmapData; public function Circles() { super(); loadImage.contentLoaderInfo.addEventListener(Event.COMPLETE, onlocad); loadImage.load(new URLRequest("circle.png")); } private function onlocad(e:Event):void { imgbtmdt = new BitmapData(loadImage.content.width, loadImage.content.height, true,0); imgbtmdt.draw(loadImage.content); imgbtm = new Bitmap(imgbtmdt); //this.mouseEnabled = false; this.addChild(imgbtm); this.addEventListener(MouseEvent.CLICK, onClick); this.addEventListener(MouseEvent.MOUSE_MOVE, onMove); } private function onMove(e:MouseEvent):void { var color32:uint = imgbtm.bitmapData.getPixel32(imgbtm.mouseX, imgbtm.mouseY); var a:uint = color32 >> 24 & 0xFF; this.mouseEnabled = a != 0; } private function onClick(e: MouseEvent):void { var color32:uint = imgbtm.bitmapData.getPixel32(imgbtm.mouseX, imgbtm.mouseY); var a:uint = color32 >> 24 & 0xFF; if (a == 0) { return; } this.x += 10;; e.updateAfterEvent(); } } движение мыши полностью деактивирует элемент. |
|
|||||
Цитата:
Цитата:
__________________
ЛОДКИ |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Error: Call to a possibly undefined method addEventListener through a reference with static type Class.
Добавлено через 40 секунд все равно ничего не меняется. Добавлено через 3 минуты вопрос на засыпку. А какого черта маска не дает никакого результата? разве она не должна продырявить как раз альфу? а она способна дырявить только изображение в моем случае |
Часовой пояс GMT +4, время: 09:14. |
|
« Предыдущая тема | Следующая тема » |
|
|