У меня есть объект enemy
, который вызывает missile
объектов, например;Удаление ребенка со сцены с помощью активных прослушивателей событий
public function fire():void {
var missile:Bullet = new Bullet();
stage.addChild(missile);
}
Проблем нет.
Теперь, когда любые объекты ракеты покидают сцену, я хочу их удалить. Кажется достаточно простым. Поэтому в моем классе Bullet
я сделал следующее:
Я использовал стандартный метод вызова этого в моем конструкторе;
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
Который затем запускает init();
public function init(e:Event = null):void {
trace("init");
removeEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.ENTER_FRAME, actions);
}
actions();
Так запускается Event.ENTER_FRAME;
public function actions(e:Event):void {
this.move();
trace(stage.stageWidth); // this works fine
stage.removeChild(this); // this throws Error #1009:
}
Я просто использую это пример. Моя функция actions();
в конечном итоге содержит код для удаления объекта, когда он покидает сцену, а не только при вызове функции. Я могу trace
stageWidth
недвижимость, без проблем. Так почему же stage.removeChild(this);
выбрасывает эту ошибку?
[Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference.
Теперь, это место, где оно становится действительно озадачивающим.
Если я переведу stage.removeChild(this);
в init();
, он отлично работает. Так почему он там работает, а не в actions();
, который всегда называется послеinit();
?