#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
не ссылается на этап, он ссылается на этап, если вы к нему подключены, и ничего другого.