Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как определить кто быстрее загружается ? (http://www.flasher.ru/forum/showthread.php?t=123604)

Gorbunkoff 06.04.2009 13:38

Как определить кто быстрее загружается ?
 
Есть в общем то рабочий код в соответствии с которым 3 картинки (скажем это фотки тракторов ) грузяться каждая на свое место и со своим предзагрузчиком. При этом в мультике одновременно отображаюся все три работающие загрузчика. Никак не могу сообразить как сделать
так , чтобы отбражался только тот предагрузчик который опережает
по скорости другие.:umnik2:
Код AS3:

//*********************************************************
// Глобальные константы
package {
        public class Globals {
                public static var Path:String="file:///C|/некий путь/Images/";
                public static var Url:String=null;
                public static var sdvig:uint=0;
                public static var images:Array=["P1.gif","P2.gif","P3.gif"];
                public static var Tname:Array=["Name1","Name2","Name3"];
                public static var I:Number=0;
        }
}
;
 
//*********************************************************
// Цикл загрузки изображений - основной класс документа
package {
        import flash.display.MovieClip;
        import LoadImage;
        import Globals;
 
        dynamic public class Start extends MovieClip {;
        public static var dt:Number=1;
        public static var MC:Array=new Array  ;
 
        public function Start() {
 
                while (Globals.I<Globals.images.length) {
                        Globals.sdvig=Globals.I*120;
                        Globals.Url=Globals.Path+Globals.images[Globals.I];
                        MC[Globals.I]=new LoadImage  ;
                        MC[Globals.I].x=Globals.sdvig;
                        MC[Globals.I].TractorsName.text=Globals.Tname[Globals.I];
                        addChild(MC[Globals.I]);
                        Globals.I+=1;
 
                }
        }
 
}
}
&#65279;;
//*********************************************************
// Предзагрузчик
package {
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.text.*;
 
 
public class LoadImage extends MovieClip {
        var _loaderStatus:TextField;
        var TractorsName:TextField;
        var percent:Number;
 
        var loader:Loader=new Loader  ;
        public function LoadImage() {
                TractorsName=new TextField  ;
                var percent=new Number  ;
                var loader:Loader=new Loader  ;
                addChild(loader);
 
                // Добавляем обработчики событий
                // для контроля за процессом загрузки
                loader.contentLoaderInfo.addEventListener(Event.OPEN,openHandler);
                loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
 
                // Загружаем внешнее изображение
                loader.load(new URLRequest(Globals.Url));
 
        }
        // Обработка окончания загрузки
        private function completeHandler(event:Event):void {
 
 
                removeChild(_loaderStatus);
                _loaderStatus=null;
                TractorsName.visible=true;
 
 
        }
        // Обработка начала загрузки
        private function openHandler(event:Event):void {
 
                _loaderStatus=new TextField  ;
                addChild(_loaderStatus);
                _loaderStatus.text="Загрузка: 0%";
                _loaderStatus.border=true;
                _loaderStatus.autoSize=TextFieldAutoSize.LEFT;
 
 
                TractorsName.border=true;
                TractorsName.autoSize=TextFieldAutoSize.LEFT;
                TractorsName.visible=false;
                addChild(TractorsName);
        }
        // Обработка процесса загрузки
        private function progressHandler(event:ProgressEvent):void {
                percent=Math.floor(event.bytesLoaded/event.bytesTotal*100);
                _loaderStatus.text="Загрузка:"+percent+"%";
        }
 
        private function unLoadHandler(event:Event):void {
                trace("unLoadHandler: "+event);
        }
 
}
}


mre 06.04.2009 13:50

Грузить данные нужно по-очереди.

Gorbunkoff 06.04.2009 14:03

Не понял - что значит по очереди , цикл это не очередь ?

Hidest 06.04.2009 14:12

Имеется в виду грузить следующий элемент после полной загрузки предыдущего... В цикле вы просто поочередно вызываете загрузку, а дальше она уже идет одновременно для всех элементов...

Мечтатель 06.04.2009 14:14

По очереди, это когда грузится первый трактор, после того, как произошла деспетчеризация события Event.INIT (именно его нужно отслеживать для успешного обращения к загруженному элементу) старутет загрузка второго трактора, и так далее. Цикличное размножение экземпляров класса Loader не является хорошей практикой программирования.

Gorbunkoff 06.04.2009 14:23

А не сложно ли Вам черкнуть пару строчек кода как пример

Smrad 06.04.2009 14:24

Цитата:

Сообщение от Мечтатель (Сообщение 811163)
По очереди, это когда грузится первый трактор, после того, как произошла деспетчеризация события Event.INIT (именно его нужно отслеживать для успешного обращения к загруженному элементу) старутет загрузка второго трактора, и так далее. Цикличное размножение экземпляров класса Loader не является хорошей практикой программирования.

Иногда, расплодившиеся Loader'ы могут в разы увеличить скорость загрузки.

mre 06.04.2009 15:06

А иногда сервер может их отвергнуть.

Smrad 06.04.2009 15:51

А иногда Loader может грузить локальные ресурсы ;).

Мечтатель 06.04.2009 21:15

Код AS3:

private var tractorArray:Array=["t1.png","t2.png","t3.png"];
private var counter:int=0;
private var loader:Loader;
 
loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitListener);
loader.load(new URLRequest("http://adobe.com/img/"+tractorArray[counter]));
 
private function loaderInitListener(e:Event):void{
if(counter<tractorArray.length-1){
//размещаем трактор на экране, или выполняем какие либо другие действия
сounter++;
loader=null;
loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitListener);
loader.load(new URLRequest("http://adobe.com/img/"+tractorArray[counter]));
}else{
//размещаем трактор на экране, или выполняем какие либо другие действия
}
}

вот вам пару строчек кода


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

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