Основная функция во вспышке? - PullRequest
1 голос
/ 23 февраля 2010

Я пытаюсь запустить проект as3.0, когда в основной строке ничего нет, я хочу, чтобы мой класс Actionscript по умолчанию начинал с него. Подобно main в C, есть ли функция main like в AS3.0?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

Класс Document является ближайшим к тому, что вы хотите. Информация о классе документа .Я склонен сводить класс документа к минимуму.

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



    public class Document extends MovieClip
    {

        public var _main:Main; 


        public function Document()
        {
            addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
        }

        //all initialization goes in here!
        private function init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            initMain();     
        }

        private function initMain():void
        {
            _main = new Main();
        }


    }
}

Обратите внимание, что вызов другого основного класса - это просто личное предпочтениеТакже слушатель события очень важен, если вы пытаетесь ссылаться на элементы на сцене.

2 голосов
/ 24 февраля 2010

У меня есть несколько изменений в ответе выше, которые могут быть полезны.

Слушатель важен для ссылок на сцену только в том случае, если SWF-файл потенциально может быть загружен как модуль в другое приложение. Если этот класс документа гарантированно является корневым классом документа, то добавление события по сути бессмысленно. Я изменил ответ выше, чтобы он шел быстрее, если он является корневым SWF, без ущерба для модульности.

Я бы порекомендовал изучить структуру, подобную RobotLegs, для организации вашего кода. Большинство людей, которые переходят к более интерактивному сценарию, думают, что им не нужно начинать с них, и в конечном итоге понимают, что они существуют по очень веским причинам, а именно, что зависимости в этой области работы быстро запутываются. Если бы вы выбрали RobotLegs, ваш класс 'Main' был бы фреймворком Context.

В любом случае, чтобы быть полезным, вашему главному классу потребуется доступ к списку отображения, поэтому вам нужно будет передать ссылку на класс Document. Однако передайте его в преобразовании в DisplayObjecContainer, чтобы избежать зависимости от Document in Main.

Вам также не нужно расширять MovieClip, поскольку здесь нет временной шкалы; Спрайт будет служить так же хорошо, и класс будет немного легче. Нет и веских оснований выставлять основную переменную - если вы собираетесь использовать SWF модульно и предоставлять API в классе документа, вы все равно не хотите открывать класс Main, вам нужен интерфейс. (К сожалению, вы не можете использовать интерфейс Document и загружать его как модульный SWF-файл - или вы не могли по крайней мере сделать это для Flash Player 9 - так как существует ошибка, связанная с этим процессом: сообщение в блоге о проблемах, связанных с SWF

С этими изменениями, ответ выше:

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

    public class Document extends Sprite
    {
        private var main:Main; 

        public function Document()
        {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
        }

        private function onAddedToStage(event:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
            init();     
        }

        private function init():void
        {
            main = new Main(this);
        }
    }
}

Но ваш основной класс не будет знать тип документа, поэтому:

package 
{   
    import flash.display.DisplayObjectContainer;

    public class Main
    {
        private var viewComponent:DisplayObjectContainer;

        public function Main(viewComponent:DisplayObjectContainer)
        {
            this.viewComponent = viewComponent;
            ...
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...