2011-11-19 4 views
1

외부 swf를로드하려고합니다.외부 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); 
     } 
+0

이 오류는 하위 swf 또는 주 swf에서 발생합니까? –

+0

동일한 ADDED_TO_STAGE 이벤트를 사용하는 경우 Main.swf 파일에서 init 함수가 e : Event를 얻지 못할 것으로 생각합니다. –

답변

0

초기화 인수로 이벤트를 통과하지 않고 다른 곳에서 호출되고있다. 간단한 해결책은 다음과 같이 당신의 초기화 코드를 변경하는 것입니다

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); 
} 

리스너가되는 존재하는지 확인하는 이유

에 : 당신은 코드의 비트를 포함 할 경우에 따라서, 그것은 단지뿐만 아니라 다음과 같은 코드를 수정하는 것이 합리적이다 스테이지가 이미 존재하기 때문에 (생성자 코드가 실행되는 동안 또는 그 전에이 swf 클래스가 이미 표시 목록에 추가되었음을 의미하기 때문에) 생성자 내부의 init 함수로 바로 뛰어 들었을 수 있습니다.