Есть ли способ прослушивания изменений в свойстве flash.display.DisplayObjectContainer numChildren? - PullRequest
0 голосов
/ 12 февраля 2010

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

Возможно ли это? а если нет, то есть идеи как сделать что-то подобное?

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

Событие 'добавлено' отправляется всякий раз, когда дочерний экранный объект добавляется в список отображения с помощью addChild () или addChildAt (). В классе DisplayObjectContainer добавьте прослушиватель:

addEventListener(Event.ADDED, onAdded);

и обработчик:

private function onAdded(e:Event):void
{
    trace('number of children is now ' + numChildren);
}
1 голос
/ 12 февраля 2010

Использование Event.ADDED_TO_STAGE в stage Объект и установка useCapture в true.

Подробнее о событии здесь

Пример:

function onAdded(e:Event):void{
    trace(e.target.toString()); //use target to get the Object added
}
stage.addEventListener(Event.ADDED_TO_STAGE, onAdded, true); // set capture to true
1 голос
/ 12 февраля 2010

Я не знаю, есть ли встроенный способ сделать это.

Альтернативы включают очевидное,

private var _num_children:Number = 0;
addEventListener(Event.ENTER_FRAME, _checkChildren, false, 0, true);

private function _checkChildren($evt:Event):void {
    if (this.numChildren != _num_children) {
        _num_children = this.numChildren;
        // There was a child (or more) added in the last frame execution
    }
}

Однако это выглядит как более элегантное решение ...

public function _addChild($do:DisplayObject) {
    $do .addEventListener(Event.ADDED_TO_STAGE, _childAdded);
    addChild($do );
}

private function _childAdded($evt:Event) {
    // do whatever with $evt.target
}

Разница здесь в том, что _childAdded будет запущен для каждого ребенка, добавленного с помощью метода _addChild. Это означает, что если вы выполняете какое-то дорогостоящее выполнение кода, вы будете делать это один раз для каждого дочернего экземпляра.

Если вы используете первый метод, вы вызываете метод только один раз за кадр, и если к одному кадру добавлено 10 изображений, он будет запущен только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...