Что значит "if (stage) init ();" значит в ActionScript? - PullRequest
5 голосов
/ 07 июня 2010

Я создаю свой первый AS3 с FlashDevelop, и я не понимаю смысла инструкций в конструкторе:

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
        }

    }

}

Что означает if (stage) init();? Что такое Event.ADDED_TO_STAGE? Зачем удалять слушателя в init()?

1 Ответ

9 голосов
/ 07 июня 2010

Основной класс - это обычно класс документа -> класс, который ставится на сцену (корень дерева отображения) первым. Это означает, что в конструкторе (основная функция) у вас уже есть доступ к stage.

if(stage) init();

фактически означает, что если stage! = Null, запустить инициализацию.

зачем проверять нуль в классе документа?
Если ваш SWF получает завернут в другой SWF. Ваша основная функция еще не будет иметь доступа к сцене, потому что только спрайты (видеоклипы и т. Д.), Находящиеся в дереве отображения (на сцене), имеют доступ к сцене.
Как это:

var mc:MovieClip = new MovieClip();//mc.stage == null
stage.addChild(mc);//mc.stage != null

Итак, добавляя слушателя в ADDED_TO_STAGE, вы ждете, пока у вас фактически не появится доступ к сцене, и затем инициируете его. Вы сразу же удаляете слушателя, потому что он вам больше не нужен.

Это обычная ситуация в классе документа (основного), потому что вам нужен этап, чтобы добавить свое меню, вступление, что угодно, чтобы он был видимым.

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