Есть ли способ проверить, является ли DisplayObject A потомком DisplayObject B?

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

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

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

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

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;
}

person hamishtaplin    schedule 26.10.2010    source источник


Ответы (2)


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

parent.contains(child);

См. ссылку на DisplayObjectContainer. содержит().

person alxx    schedule 26.10.2010
comment
О, чувак, я тоже был так взволнован своим странным решением. Огромное спасибо! ;) - person hamishtaplin; 26.10.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;
}
person hamishtaplin    schedule 26.10.2010