Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.03.2010, 12:13
DenisS1 вне форума Посмотреть профиль Отправить личное сообщение для DenisS1 Найти все сообщения от DenisS1
  № 1  
Ответить с цитированием
DenisS1

Регистрация: Oct 2009
Сообщений: 27
Question Загрузка нескольких изображений (странная проблема...)

Нужно загрузить несколько изображений по ссылкам, хранящимся в массиве. Загруженные изображения сохраняю в другой массив.
Код AS3:
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();
}
В результате всегда загружается только последнее изображение. Никаких сообщений об ошибке при этом не выводится. Судя по trace-у, изображения грузятся куда надо.
Это уже не первый вариант. До этого делал циклом - тогда последнее изображение загружалось вместо всех предыдущих, т.к. цикл, не дождавшись окончания загрузки, шёл дальше.
Подскажите, как сделать? Раньше никогда не сталкивался с такой задачей. Делаю программу на конкурс, сегодня последний день.


P.S. Оказалось, достаточно добавить после GraphicsLayer.figures[_i].images[_j]=imgLoader; ещё одну строчку: imgLoader=new Loader();


Последний раз редактировалось DenisS1; 14.03.2010 в 13:38. Причина: Всё заработало
Старый 14.03.2010, 13:13
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 2  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
надо для каждого изображения использовать свой лоадер. или грузить поочереди
зы: у вас очень плохо оформлен код. я не нашел закрывающей скобки "}" у метода loadImages
__________________
я могу стать всем, если только захочу

Старый 14.03.2010, 13:33
DenisS1 вне форума Посмотреть профиль Отправить личное сообщение для DenisS1 Найти все сообщения от DenisS1
  № 3  
Ответить с цитированием
DenisS1

Регистрация: Oct 2009
Сообщений: 27
Я уже пробовал это - делал массив Loader-ов. Но как я в функции loadingImageComplete() определю, какое это изображение и в какую ячейку массива мне его записывать? Функция ведь не знает номер того Loader-а, который её вызвал. Вот если бы можно было создать массив функций...

Старый 14.03.2010, 14:01
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 4  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
наследуйтесь от лоадера. добавте i и j
Код AS3:
class MyLoader extends Loader
{
	public var i:int;
	public var j:int;
	public function MyLoader(i:int, j:int)
	{
		super();
		this.i = i;
		this.j = j;
	}
}
но это - первое, что в голову пришло. можно что-нибудь и поэлегантлей придумать
__________________
я могу стать всем, если только захочу

Старый 14.03.2010, 15:35
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 5  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
так, покажите код где у вас используется цикл "for" далее -
в функции или прямо в цикле - для каждой картинки - свой отдельный loader, который прямо там же пихает элементы в массив.

Старый 14.03.2010, 19:46
DenisS1 вне форума Посмотреть профиль Отправить личное сообщение для DenisS1 Найти все сообщения от DenisS1
  № 6  
Ответить с цитированием
DenisS1

Регистрация: Oct 2009
Сообщений: 27
Уже всё заработало. Я отредактировал первый пост - смотрите постскриптум.

Старый 06.04.2010, 13:06
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 7  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
У меня почти тоже самое, только немного наоборот
Код AS3:
//Загружаю
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.
Старый 06.04.2010, 13:31
koIIImarik вне форума Посмотреть профиль Отправить личное сообщение для koIIImarik Посетить домашнюю страницу koIIImarik Найти все сообщения от koIIImarik
  № 8  
Ответить с цитированием
koIIImarik
 
Аватар для koIIImarik

Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
Очень советую для организации большого количества объектов использовать SomaLoader.

Для того, чтобы организовать расстановку картинок в своём положении, можно использовать возможность «задавания» за ранее созданных контейнеров для картинок или возможность указания для каждого загружаемого объекта списка параметров, в которых можно указать x и y координаты.

Старый 06.04.2010, 13:49
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 9  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от koIIImarik Посмотреть сообщение
Очень советую для организации большого количества объектов использовать SomaLoader.
Проблема не в организации, проблема скорей всего в разнице работы flashPlayer'а в программных средах.

Старый 06.04.2010, 13:52
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 10  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
Bgg
я только один способ знаю, который везде хорошо работает и локально и в сети -
в одном цикле вы создаете контейнер для картинки(if needed), затем присоединяете в каждый контейнер свой загрузчик, слушатель к этому загрузчику на тему окончания загрузки, присоединяете другие данные и запихиваете свой контейнер в массив, а также можете сразу и расставить картинки в нужном порядке в этом же цикле, вот тогда вам сразу будет все видно что зачем у вас происходит по порядку и тогда почти наверняка загрузятся все картинки как нужно.

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
загрузка , загрузка файлов в цикле , Изображения

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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