简体   繁体   English

如何在Flash中使用外部SWF作为预加载器

[英]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. 您的外部预加载器文件只需实例化Loader类的实例,然后加载您的有效负载.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. 在加载有效负载时,您可以侦听ProgressEvent.PROGRESS并使用它来更新某种负载条或其他内容。 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.
            */

        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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