PDA

Просмотр полной версии : слушатель мыши через альфу png картинки


markII
19.04.2010, 21:19
как сделать слушатель мыши для объекта(sprite или MovieClip) , который "проходил" бы через альфа канал png картинки ,лежащей над этим объектом?
Поиском ничего не нашел...

Партизан
19.04.2010, 22:53
А просто отключить события мыши для картинки?

Crash512
19.04.2010, 23:13
Ага... Кури "mouseEnabled" и "mouseChildren"...

N1KY
19.04.2010, 23:44
mouseEnabled=false игнорит все события мыши для объекта, вне зависимости, есть там видимые части или нет.. т.е. если для картинки с прозрачными областями сделать mouseEnabled=false, то объект лежащей под картинкой будет реагировать на мышку так, как будто картинки над ним нет вообще, и без разницы, есть ли там прозрачные области или нет.

dimarik
20.04.2010, 01:30
BitmapData#hitTest

markII
20.04.2010, 11:12
да, согласен-эти методы подходят, но если у меня на этом объекте(который лежит сверху) тоже весят слушатели события мыши, то как быть?

Добавлено через 4 минуты
BitmapData#hitTest
а как этот метод использовать? Он должен проверяться объектом, который лежит сверху(с альфой)? или я чего то не понимаю...можно поподробнее?

Партизан
20.04.2010, 11:51
да, согласен-эти методы подходят, но если у меня на этом объекте(который лежит сверху) тоже весят слушатели события мыши, то как быть?
Менять архитектуру. Если же этот вариант не подходит, есть несколько вариантов решений в зависимости от вашей архитектуры.
Например:
Можно сначала проверять по какому пикселу битмапы вы кликнули. И если прозрачность этого пиксела подходит под ваше собственное определение прозрачности (скажем более 80-85%) то верхний клип не реагирует на клик а нижнему отправляется событие.
Ну и так далее...

Bgg
20.04.2010, 12:43
По моему маска тут нужна. Либо программно нарисованная, либо заранее во FlashIDE.

markII
20.04.2010, 13:16
попробовал сделать как посоветовал 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);

Попробую через проверку на прозрачность пикселов, как предложил Партизан