Что делает “если (этап) init ()”; средний в ActionScript?

Я создаю свой первый 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(); средний? Что такое Событие. ADDED_TO_STAGE? Почему удаляют слушателя в init()?

5
задан rustyx 11 December 2014 в 15:28
поделиться

1 ответ

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

if(stage) init();

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

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

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

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

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

9
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: