加载外部SWF会抛出错误

时间:2011-11-19 11:13:27

标签: actionscript-3

我正在尝试加载外部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 Class

        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 :(得分:0)

从其他地方调用Init而不将Event作为参数传递。简单的解决方案是将您的初始化代码更改为:

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事件再次,除非你从你最有可能赢得的时间表中添加/删除你的主要瑞士法郎。所以,如果你确实包含了那段代码,那么修改下面的代码也是有意义的:

removeEventListener(Event.ADDED_TO_STAGE, init);

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

显然检查监听器是否存在的原因是因为我们可能刚刚跳转到构造函数内的init函数,因为该阶段已经存在(意味着此swf类已经添加到显示列表中,或者在我们的构造函数代码执行之前。)