Есть ли способ проверить, является ли DisplayObject A потомком DisplayObject B? - PullRequest
1 голос
/ 26 октября 2010

Я хотел бы иметь возможность быстро проверить, является ли данный DisplayObject потомком (не в смысле наследования - т. Е. Ребенком, внуком, правнуком, пра-правнуком и т. Д.) Другого DisplayObject.

Кажется, что нет никакого собственного способа сделать это, и я могу только думать о двух способах достигнуть этого:

  1. Создать мать всех вложенных циклов. Кажется немного, я не знаю, не так ли?
  2. Отправьте событие «пузыря» в «child» и проверьте, получает ли его потенциальный «родитель».

Сейчас пытаюсь последнее, но был бы признателен за некоторый вклад. Я хотел бы создать полезную статическую функцию утилиты, например:

static public function isDescendantOf(child:DisplayObject, parent:DisplayObjectContainer):Boolean { 

    var isDescendant: Boolean = false;

    // perform some magical 
    // check that returns true 
    // if it is a descendant

    return isDescendant;
}

Ответы [ 2 ]

7 голосов
/ 26 октября 2010

Святой рогатый лось, событие для этого ...

parent.contains(child);

См. Ссылку для DisplayObjectContainer.contains () .

0 голосов
/ 26 октября 2010

Хорошо, я все заработал, но он использует неприятную анонимную функцию.

Интересно, можно ли ее улучшить?

static public function isDescendantOf(child:DisplayObject, parent:DisplayObjectContainer):Boolean {
    const HELLO:String = "hello";
    var isDescendant:Boolean = false;

    parent.addEventListener(HELLO, function(e:Event):void {
       isDescendant = true;
    });

    child.dispatchEvent(new Event(HELLO, true, false));
    return isDescendant;
}
...