Почему Event.ADDED_TO_STAGE - PullRequest
       8

Почему Event.ADDED_TO_STAGE

0 голосов
/ 01 февраля 2011

У меня часто возникают проблемы с моим кодом, если в конструкторе нет следующего:

addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);

После выполнения кода после мой класс MovieClip или Document добавленна сцене, кажется, работает лучше ... но почему это так?

Ответы [ 2 ]

4 голосов
/ 01 февраля 2011

Думайте об этом так: если ваш класс создается, он МОЖЕТ быть из некоторого хост-кода, который выглядит примерно так:

var newComponent = new TheComponent();
parentElement.addChild(newComponent)

Итак, если вы выполняете код в конструкторе, вывыполняем код, который еще не полностью подключен.Например, у вас никогда не будет родителя в конструкторе, потому что вы еще не были добавлены в иерархию.

Конечно, некоторые вещи будут работать ... любой код, который не полагается быть частьювизуальное дерево, например, будет работать.НО, любой код, основанный на знании того, что он является частью более крупной системы, должен будет выполнить ПОСЛЕ ТОГО, КАК он добавлен на сцену.

Помогает ли это?

1 голос
/ 01 февраля 2011

В дополнение к объяснению Брайана, ADDED_TO_STAGE позволяет упростить управление объектом в пределах одного класса.Позволяя объекту знать, когда он был добавлен и удален с этой стадии, у вас есть возможность полностью управлять собой.Скажем, запуск анимации в методе-обработчике или остановка при удалении.Обычно без этого события у вас должен был бы быть объект, добавляющий его к этапу запуска и остановки.

Думайте о структуре событий как о структуре автоматизации, которая вызывает методы / функции всякий раз, когда конкретное событие транслируется.Поскольку ADDED_TO_STAGE отправляется и объект в методе addChild, это похоже на вызов специального метода bind ().

package{
 class Main extends Sprite{
  public Main(){
   // called on instantiation.
  }
  public function bind():void{
   //called later in the stack, either by ADDED_TO_STAGE or main.bind()
  }
 }
}

Это потому, что эти свойства (x, y, alpha) инициализируются вметод addChild.Это сделано по причинам управления памятью.Зачем выделять несколько укусов для чего-то, что не будет обработано, пока объект не «попадет» на сцену.

...