У вас есть 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;

}

3 комментариев на “Прозрачный PNG и мышиные события”

  1. samura высказал:

    Неплохо.
    Удачи в проекте.

  2. admin высказал:

    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, то мышь на картинке.

  3. shootnik высказал:

    Жутко выручило, когда не было времени собственное решение сделать. Огромное спасибо :)

Комментировать