Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Паралельная загрузка нескольких XML файлов. (http://www.flasher.ru/forum/showthread.php?t=134144)

proxiServer 22.12.2009 16:20

Паралельная загрузка нескольких XML файлов.
 
Идет процесс инициализации. Нужно в середине процесса подгрузить несколько XML файлов. Как мне сначала загрузить все что нужно, а потом запустить процесс далее. Я начинаю грузить несколько файлов. Событий на завершение загрузки тоже несколько. Кто закончит раньше знать не могу.

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

И что-то с ходу нормальной альтернативы придумать не могу.

Gaen 22.12.2009 16:24

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

proxiServer 22.12.2009 16:47

Хм... А если файлов много, то кучу флагов делать? Про флаги была идея, но не очень нравиться. Может есть еще какой метод?

Jewelz 22.12.2009 17:06

я делаю либо флаги, либо цепочкой :)

ИМХО флаги лучше, а что не нравится?

proxiServer 22.12.2009 17:22

Jewelz, и там и там не удобно изменять структуру. У меня файлов много. И на этапе разработки их перечень постоянно меняется. Да и сомнения берут, что это правильный подход. Потому то собственно и интересуюсь.

iflamberg 22.12.2009 17:25

Можно сделать счетчик вместо флагов. Еще есть bulk-loader, готовая библиотека для таких дел, но я ее ни разу не использовал.

veisss 22.12.2009 17:25

можно еще запомнить в начале кол-во файлов в переменную и при окончании загрузки минусовать, и тут-же проверять если ноль то все уже загрузились

random13 22.12.2009 17:55

а в чем проблема закинуть кучу лодеров в массив и слушать когда же она закачают

proxiServer 22.12.2009 17:57

iflamberg Спасибо за наводку. То что нужно.

Код AS3:

    import br.com.stimuli.loading.BulkLoader;
 
        /*
        * Грузить можно что угодно и как угодно.
        * Просто и удобно.
        */

    var bulkLoader : BulkLoader = new BulkLoader("main loading");
    bulkLoader.add("my_xml_file.xml");
    bulkLoader.add("main.swf");
    var backgroundURL : URLRequest = new URLRequest("background.jpg");
    bulkLoader.add(backgroundURL);
 
        //Событие завершения загрузки.
    bulkLoader.addEventListener(BulkLoader.COMPLETE, onCompleteHandler);
    //Событие для прогрессбара
    bulkLoader.addEventListener(BulkLoader.PROGRESS, _onProgressHandler);
 
    //Собственно запустили загрузку.
    bulkLoader.start();
 
        //Это прогрессбар, все понятно.
    function _onProgressHandler(evt : ProgressEvent) : void{
        trace("Loaded" , evt.bytesLoaded," of ",  evt.bytesTotal);
    }
 
 
    function onCompleteHandler(evt : ProgressEvent) : void{
 
            //Вытаскиваем так.
            var mainMovie : MovieClip = bulkLoader.getMovieClip("main.swf");
            var mXML : XML = bulkLoader.getXML("my_xml_file.xml");                       
            var myBitmap : Bitmap = bulkLoader.getBitmap("background.jpg");
            var myBitmap : Bitmap = bulkLoader.getBitmap(backgroundURL);
    }
 
        //Самый кайф! В любом классе вашего проекта можем по уникальному имени обратиться
        //к нашей загрузке и тащить из нее то что нам нужно.
        //Прям как библиотека флешовая.
    var mainLoader : BulkLoader = BulkLoader.getLoader("main loading");
 
    var mXML : XML = mainLoader.getXML("my_xml_file.xml");
    var mXML : XML = BulkLoader.getLoader("main loading").getXML("my_xml_file.xml");

Правда последний прикол нужно проверить. Что-то прям даже не верится. Кто знает как такое сделать без передачи ссылок параметром? Как сделано подскажите? Через статические классы?

Все, сам посмотрел внутри. Через статику сделано. Классно и не сильно большая библиотека.

random13 Лоадеры в массив - понятно. Слушать когда закачаются - непонятно. Слушать как?

random13 22.12.2009 18:15

Цитата:

Сообщение от proxiServer (Сообщение 874332)
iflamberg
random13 Лоадеры в массив - понятно. Слушать когда закачаются - непонятно. Слушать как?


cоздаем лодер, кидаем ему ссыль, говорим загрузить, вешаем слушатель на лодер(по завершение загрузки выполнить то то), закидываем слушатель в массив.

как ток выполнился колбек удаляем лодер из массива, стопим все снимаем слушатель и уничтожаем лодер


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

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