代码之家  ›  专栏  ›  技术社区  ›  mcgrailm

如何在Flash中使用外部swf作为预加载程序

  •  1
  • mcgrailm  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   Myk    14 年前

    当然,事实上这是很普遍的做法。

    您的外部预加载程序文件只需实例化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.
                */
    
            }
        }
    }