Просмотр полной версии : слушатель мыши через альфу png картинки
как сделать слушатель мыши для объекта(sprite или MovieClip) , который "проходил" бы через альфа канал png картинки ,лежащей над этим объектом?
Поиском ничего не нашел...
Партизан
19.04.2010, 22:53
А просто отключить события мыши для картинки?
Crash512
19.04.2010, 23:13
Ага... Кури "mouseEnabled" и "mouseChildren"...
mouseEnabled=false игнорит все события мыши для объекта, вне зависимости, есть там видимые части или нет.. т.е. если для картинки с прозрачными областями сделать mouseEnabled=false, то объект лежащей под картинкой будет реагировать на мышку так, как будто картинки над ним нет вообще, и без разницы, есть ли там прозрачные области или нет.
да, согласен-эти методы подходят, но если у меня на этом объекте(который лежит сверху) тоже весят слушатели события мыши, то как быть?
Добавлено через 4 минуты
BitmapData#hitTest
а как этот метод использовать? Он должен проверяться объектом, который лежит сверху(с альфой)? или я чего то не понимаю...можно поподробнее?
Партизан
20.04.2010, 11:51
да, согласен-эти методы подходят, но если у меня на этом объекте(который лежит сверху) тоже весят слушатели события мыши, то как быть?
Менять архитектуру. Если же этот вариант не подходит, есть несколько вариантов решений в зависимости от вашей архитектуры.
Например:
Можно сначала проверять по какому пикселу битмапы вы кликнули. И если прозрачность этого пиксела подходит под ваше собственное определение прозрачности (скажем более 80-85%) то верхний клип не реагирует на клик а нижнему отправляется событие.
Ну и так далее...
По моему маска тут нужна. Либо программно нарисованная, либо заранее во FlashIDE.
попробовал сделать как посоветовал Bgg. Но не получилось. В этом коде слушатель все равно не проходит через альфу. Может я че то не так пишу?
image = new Bitmap(e.target.content.bitmapData.clone());
var bitmapData:BitmapData = new BitmapData(image.width,image.height, true, 0xFF0000)
var mtrx:Array=[1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, -1, 255];
var filter:ColorMatrixFilter = new ColorMatrixFilter(mtrx);
image.bitmapData.applyFilter(image.bitmapData, image.bitmapData.rect, new Point(), filter);
container.addChild(image);
Попробую через проверку на прозрачность пикселов, как предложил Партизан
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.