当然,事实上这是很普遍的做法。
您的外部预加载程序文件只需实例化Loader类的一个实例,然后加载到payload.swf中。当负载加载时,您可以监听ProgressEvent.PROGRESS并使用它更新某种加载条或其他内容。它看起来像这样:
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
public class Preloader extends MovieClip
{
// this loads in your main swf
public var loader:Loader;
// this points to the location of your main swf
public var request:URLRequest;
// this holds a reference to your main swf once it's been loaded in.
public var content:MovieClip;
public function Preloader()
{
addEventListener(Event.ADDED_TO_STAGE, addedHandler);
super();
}
// it's a good practice to wait for ADDED_TO_STAGE before you start doing stuff, that way you can avoid certain Null Reference Errors
protected function addedHandler(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, addedHandler);
loader = new Loader();
request = new URLRequest("path/to/your/file.swf");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
}
// This will fire when your main swf is loaded in.
protected function completeHandler(e:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler);
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
trace("Load completed! Now we're going to add the target swf to the timeline:");
content = MovieClip(loader.content);
/*
* Additional logic can go here to remove your loadbar or etc.
*/
}
// this will fire if there's a problem with loading in the swf
protected function errorHandler(e:IOErrorEvent):void {
trace("Error: the path specified was incorrect. Unable to find that file. Here's the error in full:\n " + e)
}
// this will fire constantly while the target swf is being loaded, so you can see how much more you have to load.
protected function progressHandler(e:ProgressEvent):void {
var perLoaded:Number = 100* (e.bytesLoaded / e.bytesTotal)
trace("Percent Loaded: " + perLoaded);
/*
* Additional logic can go here to update your load bar, etc.
*/
}
}
}