Как ссылаться на объект stage во внешних файлах actionscript?

#flash #actionscript-3 #oop

#flash #actionscript-3 #ооп

Вопрос:

У меня есть внешний файл класса AS3, который загружается в первом кадре флэш-фильма.

Как я могу ссылаться на объект stage в файле AS3 без необходимости передавать его в качестве параметра?Я имею в виду, что мне кажется, что объект stage находится в глобальной области — или я ошибаюсь в этом предположении?

Ответ №1:

Stage — это свойство «поэтапных» объектов: каждый объект, производный от DisplayObject, имеет доступ к stage:Stage свойству.

Итак, видеоролики и растровые изображения имеют доступ к свойству stage через своего предка.

Способ «автоматически» установить свойство stage для объекта — добавить объекты в список отображения с помощью addChild() .

 var mc:MovieClip = new MovieClip();
mc.addEventListener(Event.ADDED_TO_STAGE, func);
trace(mc.stage); //null
addChild(mc);

function func(e:Event){
    mc.stage; //defined, returns reference to the parent since we added it to the display list
}

//this is how to use the listener inside the class
public class Grr extends MovieClip{
     public function Grr(){
         this.addEventListener(Event.ADDED_TO_STAGE, checkF);
     }
     public function checkF(e:Event){
         //inside this function I can do whatever I want that requires stage
     }
}
  

Комментарии:

1. Небольшая поправка: DisplayObjects имеют доступ к Stage через своего предка, если один из их предков действительно находится в списке отображения. Дело в том, что Stage не является глобальной вещью — например, в многооконных приложениях AIR каждое окно может иметь свой собственный Stage. So DisplayObject.stage не ссылается на этап, он ссылается на этап, если вы к нему подключены, и ничего другого.