删除AS3 Preloader中的事件监听器

时间:2012-08-02 10:51:25

标签: actionscript-3 flash preloader

到目前为止,我已经设法构建了一个简单的基于文本的预加载器,我可以在其中加载外部SWF文件。我有很多预先构建的SWF,并且在外部加载它们似乎是最好的选择。我设法让我的预加载器工作,但是我想在事件完成后删除我的事件监听器和加载器子。请有人看看我的代码并解释我做错了什么。

非常感谢,

var req:URLRequest = new URLRequest("gallery.swf");
var loader:Loader = new Loader();
var finishLoading:Loader = new Loader();

finishLoading.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, done);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fileLoaded);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, preload);
loader.load(req);

function fileLoaded(event:Event):void
{
        addChild(loader);
}

function preload(event:ProgressEvent):void
{
    var percent:Number = Math.round(event.bytesLoaded / event.bytesTotal * 100);           //this gives a percent of how much data has been loaded
    preload_txt.text = String(percent) + "%";
}

function done(event:ProgressEvent):void
{
    if(event.bytesLoaded >= event.bytesTotal){
        removeChild(loader); 
        loader = null;

        loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fileLoaded);
        loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, preload);
    }

 }

1 个答案:

答案 0 :(得分:1)

你在删除事件监听器之前垃圾收集了加载器。反过来。

if(event.bytesLoaded >= event.bytesTotal){
  loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fileLoaded);
  loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, preload);
  removeChild(loader); 
  loader = null;
}