Reputation: 3
So far, I have managed to build a simple text based preloader in which I can load external SWF files. I have a lot of prebuilt SWFs and loading them externally seems to be the best option. I have managed to get my preloader to work, however I want to remove my event listeners and the loader child once the event is completed. Please could someone take a look at my code and explain what i've done wrong.
Thank You very much,
Luke
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);
}
}
Upvotes: 0
Views: 883
Reputation: 1624
You garbage collected the loader before removing the event listeners.. reverse it.
if(event.bytesLoaded >= event.bytesTotal){
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fileLoaded);
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, preload);
removeChild(loader);
loader = null;
}
Upvotes: 1