Загрузка внешнего SWF выдает ошибку - PullRequest
1 голос
/ 19 ноября 2011

Я пытаюсь загрузить внешний SWF.

Но выдает ошибку при компиляции.

ArgumentError: Error #1063: Argument count mismatch on Main/init(). Expected 0, got 1.
    at flash.display::DisplayObjectContainer/addChild()
    at flash.display::Stage/addChild()
    at MainSWF/onLoadedAction()

Класс Swfloader

        public function MainSWF():void
        {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
        private function init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            _loader = new Loader();
            _my_url = new URLRequest("Main.swf");
            _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressAction);
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedAction);
            _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, IOErrorAction);
            _loader.load(_my_url);
        }   
        private function onLoadedAction(e:Event):void
        {
            var mc:Sprite  = new Sprite();
            mc.addChild(_loader.content);           
            trace(stage);
            stage.addChild(mc);
            _loader.removeEventListener(ProgressEvent.PROGRESS, onProgressAction);
        }

1 Ответ

0 голосов
/ 20 ноября 2011

Init вызывается откуда-то еще без передачи события в качестве аргумента.Простое решение - изменить код инициализации так, чтобы он выглядел следующим образом:

private function init(e:Event = null):void
{

}   

Также вам следует изменить код ADDED_TO_STAGE, чтобы он выглядел следующим образом:

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

Если вы уже добавлены вна этапе перед добавлением прослушивателя (именно поэтому мы проверяем и определяем, определен ли этап), то вы никогда больше не будете запускать событие ADDED_TO_STAGE, если только вы не добавите / не удалите свой основной swf из временной шкалы, которую вы больше всего считаетескорее всего не буду делать.Таким образом, если вы включите этот бит кода, то имеет смысл только изменить следующий код:

removeEventListener(Event.ADDED_TO_STAGE, init);

на

if(hasEventListener(Event.ADDED_TO_STAGE)){
    removeEventListener(Event.ADDED_TO_STAGE, init);
}

Очевидно, что причина проверки, чтобы увидеть, еслипрослушиватель существует потому, что мы, возможно, только что перешли прямо к функции init внутри конструктора, потому что этап уже присутствовал (то есть этот класс swf уже был добавлен в список отображения во время или до выполнения нашего кода конструктора).

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