Показать сообщение отдельно
Старый 13.12.2013, 18:16
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 1  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
По умолчанию MOUSE_OVER с учетом прозрачности

Как правильно сделать контроль за наведением/уходом курсора на спрайт с учетом прозрачности перекрывающих спрайтов?
Например нужно подкрашивать линии при наведении курсора и возвращать цвет при уходе курсора с линии. Перекрывающие спрайты (красный круг) могут быть чайлдами линии, а могут и не быть.

Пока сделал так: в контейнере сцены, проверяю MOUSE_MOVE, определяю спрайт с учетом прозрачности всех остальных и ему адресно перенаравляю MOUSE_OVER, вроде бы работает, но решение кажется топорным:

Код AS3:
protected function OnMouseMove(e:MouseEvent):void {
// Учесть прозрачность спрайтов для наведения мышки
if(lOnMouseOverFlag==false) {
// Первый проход - обработка (проверка по какому объекту было наведение с учетом прозрачности)
var OverObject:EventDispatcher = EventDispatcher(GetObjectUnderPoint(e.stageX, e.stageY));
	if (lMouseOverObject != OverObject && lMouseOverObject != null) {
		lMouseOverObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));
		lMouseOverObject = null;
	}
	if (OverObject != null && e.target != OverObject) {
		lOnMouseOverFlag = true;
		e.stopImmediatePropagation();
		OverObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
		lMouseOverObject = OverObject;
	}
}
else {
// Второй проход - по правильному объекту с учетом прозрачности вышестоящих - сбросить флаг
	lOnMouseOverFlag = false;
}
Изображения
 
__________________
interplanety