Форум 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=169422)

Astraport 05.10.2011 01:13

Комплиты с лоадера приходят не в правильном порядке
 
Код AS3:

protected function button1_clickHandler(event:MouseEvent):void
                        {
 
                                for (var i:uint = 0; i < myArray.length; i++) {
                                        var loader:Loader = new Loader();
                                        var request:URLRequest = new URLRequest("images/" + i + ".jpg");
                                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                                        loader.load(request);
                                }
                        }
                        protected function onComplete(event:Event):void
                        {
                                trace (LoaderInfo(event.target).url);
}

В трейсе такое
Код:

file:///C|/Users/Astraport2011/Adobe%20Flash%20Builder%204.5/c3d/bin%2Ddebug/images/4.jpg
file:///C|/Users/Astraport2011/Adobe%20Flash%20Builder%204.5/c3d/bin%2Ddebug/images/2.jpg
file:///C|/Users/Astraport2011/Adobe%20Flash%20Builder%204.5/c3d/bin%2Ddebug/images/0.jpg
file:///C|/Users/Astraport2011/Adobe%20Flash%20Builder%204.5/c3d/bin%2Ddebug/images/3.jpg
file:///C|/Users/Astraport2011/Adobe%20Flash%20Builder%204.5/c3d/bin%2Ddebug/images/1.jpg

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

stweet 05.10.2011 01:17

"Loader" - "event.target" потому что это объект а не массив. А объекты не сортируются как массив по индексу. Ручками)

trng 05.10.2011 01:23

loader.load - асинхронный метод. То есть неизвестно когда наступит Event.COMPLETE для конкретного loader.
Грубо можно считать, что чем больше картинка, тем позже наступает Event.COMPLETE.
Сравнение объект/массив здесь ни при чем.

Лоадеры у вас создаются внутри цикла - поэтому их много (myArray.length-1 штук).
И для каждого из них возникает Event.COMPLETE.

Astraport 05.10.2011 01:31

И какое решение?
Пока вижу - считать пока не случиться Event.COMPLETE для myArray.length раз. Каждый раз сохраняя данные в отдельном массиве. Затем сортировать массив.

trng 05.10.2011 01:47

Не совсем понятно зачем привязываться к порядку загрузки, но если уж это так принципиально, то есть два варианта:

1. Если важен именно порядок загрузки, то каждая следующая загрузка (очевидно) должна начинаться после предыдущей. Например как то так:

Код AS3:

protected var currentPic:int = 0;
protected function button1_clickHandler(event:MouseEvent):void
{
        var loader:Loader = new Loader();
        var request:URLRequest = new URLRequest("images/" + currentPic + ".jpg");
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
        loader.load(request);
}
 
protected function onComplete(event:Event):void
{
  trace (LoaderInfo(event.target).url);
  currentPic++;
  if (currentPic == myArray.length) return;
  var loader:Loader = new Loader();
  var request:URLRequest = new URLRequest("images/" + currentPic + ".jpg");
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  loader.load(request);
}


2. Если порядок не важен, а важно дождаться загрузки ВСЕХ картинок, то тоже с переменной currentPic, и когда currentPic == myArray.length - можно приступать к дальнейшим действиям.

Astraport 05.10.2011 02:08

trng, спасибо.

Второй вариант понятен, а вот первый после загрузки первой картинки выдает ошибку:
SecurityError: Error #2000: Отсутствует активный контекст безопасности.

Добавлено через 2 минуты
Упс... Сорри. Моя ошибка. Все работает и по первому варианту! Спасибо.


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

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