Как использовать внешний SWF в качестве прелоадера во Flash - PullRequest
1 голос
/ 23 ноября 2010

У меня есть проект, в котором я хочу время от времени использовать разные предварительные загрузчики, поэтому я хотел знать, есть ли способ, чтобы мой проект использовал внешний SWF для предварительного загрузчика?

1 Ответ

1 голос
/ 23 ноября 2010

Абсолютно, и на самом деле это очень распространенная практика.

Ваш внешний файл предварительного загрузчика просто должен создать экземпляр класса Loader, а затем загрузить его в полезную нагрузку .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.
            */

        }
    }
}
...