выбор элемента актива / пользовательского интерфейса, скрытого за другим в сценарии действия 3 - PullRequest
0 голосов
/ 21 февраля 2012

У меня на сцене два или более графических элемента (растровое изображение, элемент управления).Все они слушают события мыши.Иногда они могут перекрываться другими элементами полностью или частично.(подумайте о зашифрованных кусочках головоломки)

Когда я нажимаю на элемент, событие щелчка должно проходить по элементу, если под ним что-то есть в этой точке .Если под точкой мыши ничего нет, событие перемещения должно сработать.

Например: посмотрите на поля ниже.Скажем, поле A, нарисованное знаком "=", перекрывает поле B, нарисованное знаком "-".Область сговора обозначается знаком «#».

Если щелкнуть мышью в области «#», событие должно инициировать событие щелчка в блоке B вместо поля «A» и соответствующие события, еслипри щелчке мышью по областям A и B, не находящимся в сговоре.

========
=      =
=   ####----
=   ####   -
====####   -
    -      -
    -      -
    --------

Я хочу, чтобы можно было обойти все события мыши элемента, пока элемент в нижней части не достигнет.Я надеюсь, что мой вопрос имеет смысл.

1 Ответ

1 голос
/ 21 февраля 2012

DisplayObjectContainer имеет метод getObjectsUnderPoint.Это означает, что в вашем обработчике событий вы можете получить список DisplayObjects под точкой щелчка и проверить, содержит ли этот список что-то еще, кроме действительного объекта, по которому щелкнули, что-то вроде этого:

function mouseClickHandler(e:MouseEvent):void
{
  var clickedObject:DisplayObject = e.currentTarget as DisplayObject;
  var list:Array = objectsContainer.getObjectsUnderPoint(new Point(objectsContainer.mouseX,objectsContainer.mouseY));
  for each (var object:DisplayObject in list) {

       if (clickedObject != object) {
         //call different eventHandler on the object
         return;
       }
    }
    //call moveEventHandler
}

objectsContainerв этом случае это будет Stage объект (если ваши объекты добавлены непосредственно в stage) или некоторый DisplayObjectContainer, который является родительским для всех этих объектов.

...