2010-05-03 3 views
1

Loader 클래스를 사용하여 swf 하나를 다른 SWF로로드하지만 하위 SWF로드가 완료되고 표시 목록에 추가되면 문서 클래스가 인스턴스화되지 않습니다. 객체를 만들 때 실행해야하는 trace 문이 몇 개 있지만 부모 SWF에로드 할 때 아무 것도 일어나지 않습니다. 자식 SWF를 독자적으로 컴파일하면 Document Class가 예상대로 실행됩니다.로드 중 SWF의 문서 클래스

그래서 궁금한데 ... 어떻게 하위 SWF의 문서 클래스를 Loader.content과 연결합니까?

코드는 아래 Kishi의 솔루션으로 업데이트되었습니다.

public class Preloader extends Sprite { 
    import flash.net.*; 
    import flash.display.*; 
    import flash.events.*; 

    // code in parent SWF's Document Class (Preloader.as) 
    private var swfLoader:Loader; 
    public var mainMovie:MovieClip; 

    public function Preloader(){ 
     swfLoader = new Loader(); 
     swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderDone); 
     swfLoader.load(new URLRequest("mainmovie.swf")); 
    } 

    private function loaderDone(e:Event):void { 
     // Cast Loader.content to MovieClip 
     mainMovie = MovieClip(swfLoader.content); 

     mainMovie.addEventListener(Event.ADDED_TO_STAGE, mainMovieAddedListener); 

     addChildAt(mainMovie, 0); 

    } 
    private function mainMovieAddedListener(e:Event):void { 
     // init() not necessary 
    } 
} 

// MainMovie.as runs after casting swfLoader.content to MovieClip 

public class MainMovie extends Sprite { 

    public function MainMovie(){ 
     trace('MainMovie WHATTUP'); 
    } 

    public function init():void { 
     trace('init'); 
    } 
} 

건배!

답변

3

문제는 얼마나 당신은 SWF 인스턴스에 액세스하려고합니다.

먼저 문서 클래스 인스턴스는 로더콘텐츠으로 참조됩니다. 실제 클래스와 같은 (이 경우 MainMovie) 또는 동적 클래스 (에도 당신이 그것에 으로 DisplayObject 중 하나를 캐스팅해야 할 것,

var swf:DisplayObject = swfLoader.content; 

을하지만 :이처럼 참조 할 것 MovieClip)은 사용자 정의 속성을 사용하려고하므로 표시 객체의 일부가 아닙니다. 도움이

var swf:MovieClip = MovieClip(swfLoader.content); 
swf.init(); 

희망 : 따라서 MainMovie.init()과 같이 호출 할 수 있습니다.

1

스테이지에 mainMovie를 추가 한 다음 초기화하는 수신기를 추가합니다. 영화는 무대에 추가 된 이후에 추가되므로 이벤트가 시작되지 않습니다. 크리스티는 말했다 무엇

0

당신의 init 메소드가 발사되지 않은 이유, 아마 맞다, 그러나 더 이상한 문제는로드 된 자식 SWF의 생성자, MainMovie가 즉시 그 개체가 만들어으로 발사해야한다는 것입니다.

내가 이런 식으로 할 때마다로드 된 swf의 내용에서 새로운 Sprite 객체를 만들지 못했습니다. BitmapData처럼 swf를 사용하여 Sprite를 만들려는 것 같습니다. mainMovie.

다음을 시도하십시오. swfLoader = null이라는 진술을 제거하고 대신 addChild(swfLoader);라고 말하십시오. 당신은 여전히 ​​이벤트 리스너가이 단계에 추가를 확인하려는 경우, 당신은 addChild(swfLoader);을하기 전에 넣어, 물론 것은 에 SWFLoader하지에 mainMovie 객체 넣어 :

swfLoader.addEventListener(Event.ADDED_TO_STAGE, mainMovieAddedListener); 
addChild(swfLoader); 

것은 무엇을보기를 너는 그때 얻는다. [또한 당신이 초기화에 액세스를 시도에서 가져온 정확한 오류를 붙여 넣을 수 있습니다?]

debu