Прозрачный PNG и мышиные события
Июнь 11, 2010
У вас есть png картинка с прозрачными областями положенная в Sprite. События MouseEvent.ROLL_OVER и MouseEvent.ROLL_OUT срабатывают на прямоугольной области картинки вместо того, чтобы реагировать лишь на непрозрачные пиксели.
Демо:
Решение – скачать проект:
public function mouseHits(target:DisplayObject):Boolean{
if (target == null || target.stage == null){
return false;
}
if (target.hitTestPoint(target.stage.mouseX, target.stage.mouseY)){
var aMatrix:Matrix = new Matrix();
aMatrix.translate(-target.mouseX, -target.mouseY);
var bd:BitmapData= new BitmapData(1, 1, true, 0x00000000);
bd.draw(target, aMatrix);
var alpha:uint = ((bd.getPixel32(0, 0) >> 24) & 0xFF);
bd.dispose();
return alpha > 0x0F;
}
return false;
}
Сентябрь 22, 2010 в 10:57
Неплохо.
Удачи в проекте.
Февраль 18, 2011 в 08:23
2 Gibsoman:
1) DisplayObject – это любой визуальный объект, будь это Sprite или Loader. Все они наследуются от DisplayObject. Без разницы каким способом загружена картинка внутрь (Loader, Embed, символ в библиотеке Flash IDE)
2) Подключается просто: Проверка кладётся в обычные мышиные мышиные события MOUSE_MOVE и ROLL_OUT: Если ROLL_OUT или MOUSE_MOVE c mouseHits(target)==false,то мышь сейчас вне картинки. Если MOUSE_MOVE c mouseHits(target)== true, то мышь на картинке.
Апрель 29, 2011 в 06:12
Жутко выручило, когда не было времени собственное решение сделать. Огромное спасибо