Показать сообщение отдельно
Старый 09.04.2009, 13:55
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 7  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Нашел решение по данной теме. Все гениальное оказалось просто.
Решаем следующую задачу. Есть карта. Когда на ней нажимают кнопку и начинают двигать мышь необходимо двигать карту. На самой карте находятся объекты которые также реагируют на клик по ним мышкой и могут выполнять действие от выделения до обновления карты, это уже зависит от объекта.
Вот какое решение получилось в итоге:
Заводим значение минимальноеДопустимоеСмещение - это чтобы не запускать движение карты когда мышка непроизвольно дернулась после нажатия, и логическую флагДвижения. Объекты на карте отрабатывают свои клики как положено. Далее на самой карте фиксируем два обработчика для событий MOUSE_DOWN, и CLICK причем последний в фазе Capture
Код AS3:
addEventListener(MouseEvent.MOUSE_DOWN, hnMouseDownMap);
addEventListener(MouseEvent.CLICK, hnMouseClickMap,true);
в hnMouseDownMap будем сбрасывать флаг движения и готовить все необходимые механизмы для отслеживания движения
Код AS3:
private function hnMouseDownMap(e:MouseEvent):void 
		{
			startX = mouseX;
			startY = mouseY;
			vMoving = new _Vector();
			addEventListener(MouseEvent.MOUSE_MOVE, hnMouseMoveMap);
			addEventListener(MouseEvent.MOUSE_UP, hnMouseUpMap);
		}
Если далее при движении мыши будет зафиксировано смещение мыши больше чем наше минимальноеДопустимоеСмещение то устанавливаем флаг флагДвижения.
При клике по карте в фазе Capture отлавливаем событие и если было зафиксировано движение (флагДвижения в истине) то отменяем распространение клика на потомков
Код AS3:
private function hnMouseClickMap(e:MouseEvent):void{
if (флагДвижения)
{
e.stopPropagation();
}
}
Вот наши потомки клик и не получили когда нам это не нужно. Если все необходимо делать на одном объекте то вполне можно применять вариант с таймером.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 09.04.2009 в 14:06.