2010-05-03 61 views
1

我使用Loader类将一个swf加载到另一个中,但是当子SWF完成加载并添加到显示列表时,其文档类未实例化。我有几个跟踪语句应该在创建对象时执行,但是在加载到父SWF时没有任何事情发生。当我自己编译子SWF时,文档类按预期运行。AS3麻烦实例化已加载的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实例。

一,文件类实例引用加载程序内容属性。你会像这样引用它:

var swf:DisplayObject = swfLoader.content; 

但是,即使如此,你不得不在的DisplayObject无论是投给它的真实类(MainMovie,在这种情况下)或动态类(如MovieClip),因为您正在尝试使用自定义属性,这不属于DisplayObject本身。因此,你可以调用MainMovie.init()像这样:

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

希望有所帮助。

1

您正在将mainMovie添加到舞台上,然后添加一个将其包含在内的侦听器。在电影上台后添加该事件并不会被解雇。

0

什么克里斯蒂说可能是正确的,因为你的初始化方法没有启动,但更奇怪的问题是,你的加载子SWF的构造函数,应该在创建该对象后立即触发。

每当我做了这样的事情,我从来没有从加载的swf的内容创建一个新的Sprite对象。看起来你在做的是使用像它的BitmapData这样的swf来创建Sprite mainMovie

试试这个:删除你的陈述,说swfLoader = null,而不是说addChild(swfLoader);。如果你仍然想为它添加到舞台的是事件侦听器检查,把它放在你的addChild(swfLoader);之前,当然把它放在的SWFLoader不是mainMovie对象:

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

看什么你会那么做。 [你也可以粘贴您尝试访问初始化得到了确切的错误?]

得不