Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Flash прелоадер (http://www.flasher.ru/forum/showthread.php?t=192599)

softrix 16.01.2013 19:33

Flash прелоадер
 
Я новичок во Флэш, мне на сайт нужно сделать прелоадер для SWF файлов.

Как я понимаю, структура обычного Flash прелоадера такова: получает ссылку на SWF файл, качает его, параллельно выводит информацию о статусе загрузки, затем отображает содержимое.

В интернете нашел много уроков по созданию прелоадеров, но ни в одном не сказано, как подгрузить нужный файл, и как затем его отобразить.
Может кто подскажет, как это сделать или поделится ссылкой на исходники готового прелоадера ?

namespaces 16.01.2013 20:07

Прелоадеры бывают внешние и внутренние. Если основная флешка тяжелая, лучше воспользоваться внешней.
Даже не знаю что тебе посоветовать, в сети столько примеров, готовые классы есть.

NikolyA 16.01.2013 20:20

можно вот так:

Код AS3:

var g:Loader = new Loader();
g.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop);
g.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
g.load(new URLRequest("грузим_нашу_прелесть.swf"));
 
function loop(e:ProgressEvent):void
{
  var perc:Number = e.bytesLoaded / e.bytesTotal;
  percent.text = Math.ceil(perc*100).toString();
}
 
function done(e:Event):void
{
  removeChild(percent);
  percent = null;
  addChild(l);
}


spirit2 16.01.2013 20:21

Цитата:

Сообщение от namespaces (Сообщение 1116017)
Прелоадеры бывают внешние и внутренние. Если основная флешка тяжелая, лучше воспользоваться внешней.
Даже не знаю что тебе посоветовать, в сети столько примеров, готовые классы есть.

Внешний или внутренний, определяется поставленной задачей, а не размером флешки.

Вот FDшный:
Код AS3:

package
{
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.events.ProgressEvent;
        import flash.text.TextField;
        import flash.utils.getDefinitionByName;
 
        public class Preloader extends MovieClip
        {
                private var _progressField:TextField;
 
                public function Preloader()
                {
                        if (stage)
                        {
                                stage.scaleMode = StageScaleMode.NO_SCALE;
                                stage.align = StageAlign.TOP_LEFT;
                                //stage.showDefaultContextMenu = false;
 
                                _progressField = new TextField();
                                _progressField.width = 40;
                                _progressField.height = 40;
                                _progressField.x = stage.stageWidth / 2 - 20;
                                _progressField.y = stage.stageHeight / 2 - 20;
                                addChild(_progressField);
                        }
                        addEventListener(Event.ENTER_FRAME, checkFrame);
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
                        loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
                }
 
                private function ioError(e:IOErrorEvent):void
                {
                        trace(e.text);
                }
 
                private function progress(e:ProgressEvent):void
                {
                        _progressField.text = Math.floor(100 / e.bytesTotal * e.bytesLoaded) + "%";
                }
 
                private function checkFrame(e:Event):void
                {
                        if (currentFrame == totalFrames)
                        {
                                stop();
                                loadingFinished();
                        }
                }
 
                private function loadingFinished():void
                {
                        removeEventListener(Event.ENTER_FRAME, checkFrame);
                        loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
                        loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);
 
                        removeChild(_progressField);
                        _progressField = null;
 
                        startup();
                }
 
                private function startup():void
                {
                        var mainClass:Class = getDefinitionByName("Main") as Class;
                        addChild(new mainClass() as DisplayObject);
                }
 
        }
 
}

Код AS3:

        [Frame(factoryClass="Preloader")]
        public class Main extends Sprite {


Sintesis 16.01.2013 20:30

вот готовый внешний, самый подходящий для данного случая:
Код AS3:

package {
 
        import flash.display.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import flash.text.*;
 
        public class SlimLoader extends Sprite{
                private var loader:Loader;
                private var progressOutput:TextField;
 
                public function SlimLoader(){
                        createLoader();
                        createProgressIndicator();
                        //"http://../*.swf"
                        load(new URLRequest("*.swf"));
                }
                private function createLoader():void{
                        loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);
                        loader.contentLoaderInfo.addEventListener(Event.INIT, initListener);
                }
                private function createProgressIndicator():void{
                        progressOutput = new TextField();
                        progressOutput.autoSize = TextFieldAutoSize.LEFT;
                        progressOutput.background = true;
                        progressOutput.border = true;
                        progressOutput.x = 200;
                        progressOutput.y = 150;
                        progressOutput.selectable = false;
                        progressOutput.text = "LOADING...";
                }
                private function load (urlRequest:URLRequest):void{
                        loader.load(urlRequest);
                        if(!contains(progressOutput)){
                                addChild(progressOutput);
                        }
                }
                private function progressListener(e:ProgressEvent):void{
                        progressOutput.text = "LOADING: " + Math.floor(e.bytesLoaded / 1027) + "/" + Math.floor(e.bytesTotal / 1027) + "kB";
                }
                private function initListener(e:Event):void{
 
                }
                private function completeListener(e:Event):void{
                        removeChild(progressOutput);
                        stage.addChild(loader.content);
                }
        }
}


namespaces 16.01.2013 22:20

Сейчас будем соревноваться у кого какой прелоадер?
Цитата:

В интернете нашел много уроков по созданию прелоадеров, но ни в одном не сказано, как подгрузить нужный файл, и как затем его отобразить.
Вы хоть объясните куда будет вставляться подгружаемый файл. Копи-пастить я тоже могу.

NikolyA 16.01.2013 23:20

с понятием классы знаком? а подгружаемый файл можешь подгружать откуда тебе лучше


Часовой пояс GMT +4, время: 05:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.