简体   繁体   中英

How to use an external swf as a preloader in Flash

我有一个项目,希望不时使用不同的预加载器,所以我想知道是否有一种方法可以让我的项目将外部swf用于预加载器?

Absolutely, and in fact that's a very common practice.

Your external preloader file just has to instantiate an instance of the Loader class, then load in your payload .swf. While the payload is loading in, you can listen for ProgressEvent.PROGRESS and use that to update some sort of a load bar or whatever. It would look something like this:

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.
            */

        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM