|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2009
Сообщений: 27
|
Загрузка нескольких изображений (странная проблема...)
Нужно загрузить несколько изображений по ссылкам, хранящимся в массиве. Загруженные изображения сохраняю в другой массив.
private var imgLoader:Loader=new Loader(); private var _i:int=0, _j:int=0; // функция загружает изображения для карты (рекурсивно) public function loadImages():void{ trace(GraphicsLayer.figures[_i].imageURL[_j]); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingImageComplete); imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, handlerForIOError); imgLoader.load(new URLRequest(GraphicsLayer.figures[_i].imageURL[_j])); } private function loadingImageComplete(e:Event):void{ imgLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadingImageComplete); imgLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, handlerForIOError); GraphicsLayer.figures[_i].images[_j]=imgLoader; trace("Загружено в "+(_j).toString()); _j++; if(_j==GraphicsLayer.figures[_i].imageURL.length){_j=0; _i++;} if(_i==GraphicsLayer.n){_i=0; _j=0; return} loadImages(); } private function handlerForIOError(e:Event):void{ trace("Error: Неудачная попытка загрузки изображения "+ GraphicsLayer.figures[_i].imageURL[_j]); _j++; if(_j==GraphicsLayer.figures[_i].imageURL.length){_j=0; _i++;} if(_i==GraphicsLayer.n){_i=0; _j=0; return} loadImages(); } Это уже не первый вариант. До этого делал циклом - тогда последнее изображение загружалось вместо всех предыдущих, т.к. цикл, не дождавшись окончания загрузки, шёл дальше. Подскажите, как сделать? Раньше никогда не сталкивался с такой задачей. Делаю программу на конкурс, сегодня последний день. P.S. Оказалось, достаточно добавить после GraphicsLayer.figures[_i].images[_j]=imgLoader; ещё одну строчку: imgLoader=new Loader(); Последний раз редактировалось DenisS1; 14.03.2010 в 13:38. Причина: Всё заработало |
|
|||||
надо для каждого изображения использовать свой лоадер. или грузить поочереди
зы: у вас очень плохо оформлен код. я не нашел закрывающей скобки "}" у метода loadImages
__________________
я могу стать всем, если только захочу |
|
|||||
Регистрация: Oct 2009
Сообщений: 27
|
Я уже пробовал это - делал массив Loader-ов. Но как я в функции loadingImageComplete() определю, какое это изображение и в какую ячейку массива мне его записывать? Функция ведь не знает номер того Loader-а, который её вызвал. Вот если бы можно было создать массив функций...
|
|
|||||
наследуйтесь от лоадера. добавте i и j
но это - первое, что в голову пришло. можно что-нибудь и поэлегантлей придумать
__________________
я могу стать всем, если только захочу |
|
|||||
Регистрация: Feb 2007
Сообщений: 563
|
так, покажите код где у вас используется цикл "for" далее -
в функции или прямо в цикле - для каждой картинки - свой отдельный loader, который прямо там же пихает элементы в массив. |
|
|||||
Регистрация: Oct 2009
Сообщений: 27
|
Уже всё заработало. Я отредактировал первый пост - смотрите постскриптум.
|
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
У меня почти тоже самое, только немного наоборот
//Загружаю var context:LoaderContext = new LoaderContext(); if (Security.sandboxType!='localTrusted') context.securityDomain = SecurityDomain.currentDomain; context.applicationDomain = ApplicationDomain.currentDomain; loader = new Loader(); urlRequest = new URLRequest(path); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeLoad); loader.load(urlRequest, context); //Сохраняю Security.allowDomain(loader.contentLoaderInfo.url); movClass = loader.contentLoaderInfo.applicationDomain.getDefinition("mov") as Class; arraySWF.push(movClass);//складываю в массив ... var mov:MovieClip = new arraySWF[i] addChild(mov);//ну и потом добавляю в цикле Но как только гружу во вконтакт, то добвляются только самый первый обьект который загрузлся. Т.е. как будто в массиве arraySWF все одинаковые обьекты(arraySW[0] = arraySW[1] =...) Последний раз редактировалось Bgg; 06.04.2010 в 13:35. |
|
|||||
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Очень советую для организации большого количества объектов использовать SomaLoader.
Для того, чтобы организовать расстановку картинок в своём положении, можно использовать возможность «задавания» за ранее созданных контейнеров для картинок или возможность указания для каждого загружаемого объекта списка параметров, в которых можно указать x и y координаты. |
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
|
|
|||||
Регистрация: Feb 2007
Сообщений: 563
|
Bgg
я только один способ знаю, который везде хорошо работает и локально и в сети - в одном цикле вы создаете контейнер для картинки(if needed), затем присоединяете в каждый контейнер свой загрузчик, слушатель к этому загрузчику на тему окончания загрузки, присоединяете другие данные и запихиваете свой контейнер в массив, а также можете сразу и расставить картинки в нужном порядке в этом же цикле, вот тогда вам сразу будет все видно что зачем у вас происходит по порядку и тогда почти наверняка загрузятся все картинки как нужно. |
Часовой пояс GMT +4, время: 03:35. |
|
« Предыдущая тема | Следующая тема » |
Теги |
загрузка , загрузка файлов в цикле , Изображения |
|
|