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

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

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

Регистрация: Apr 2008
Адрес: Kiev, Ukraine
Сообщений: 43
Отправить сообщение для sweet_fighter с помощью ICQ
Cool BulkLoader и Цикл

Не могу понять, что не так делаю?
xml грузиться отлично. А вот изображения не хотят...

Код AS3:
		public function Projects():void 
		{
			loader.add("xml/projects.xml", { id:"xml" } );
			loader.addEventListener(BulkLoader.COMPLETE, onXMLLoaded);
			loader.start();
		}
 
		public function onXMLLoaded(e:Event):void {
			myXML = loader.getXML("xml");
			my_images = myXML.item;
			my_total = my_images.length();
			addChild(container_mc);
			initProjects();
		}
 
		public function initProjects():void {
			for (var i:Number = 0; i < my_total; i++) {
 
				var img_url:String = my_images[i].img; //7 изображений с разными именами
				var imageId:String = my_images[i].id; //1,2,3,4,5,6,7
 
				imageLoader = new BulkLoader(imageId);
				imageLoader.add(img_url, { id:imageId } );
				imageLoader.get(imageId).addEventListener(BulkLoader.COMPLETE, onImageLoaded);
				imageLoader.start();							
			}
		}
		public function onImageLoaded(e:Event):void {
			imgBitmap = imageLoader.getBitmap(e.currentTarget.id);
			trace("id="+e.currentTarget.id)
			trace("Object="+imgBitmap);
			trace("------------------")
 
		}
имеем вывод
Код AS3:
id=5
Object=null
------------------
id=2
Object=null
------------------
id=6
Object=null
------------------
id=3
Object=null
------------------
id=7
Object=[object Bitmap]
------------------
id=4
Object=null
------------------
id=1
Object=null
------------------
Тоесть битмап грузится только на последнем елементе.
Подскажите, плиз. =)

upd: Есть подозрение, что пока BulkLoader.COMPLETE одумается, то строка imageId наберет максимальное количество елементов, тоесть 7. Но почему тогда при выводе не все id = 7.
upd2: И еще, если заметили, почему то булклоадер грузит изображения как ему захочеться.)) В данном случае хаотично.. Не 1,2,3...n, а 5,2,6...1


Последний раз редактировалось sweet_fighter; 13.02.2011 в 05:02.
Старый 13.02.2011, 12:02
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Не пользовался BulkLoader. Возможно вам стоит вместо цикла в initProjects() инициализировать загрузку следующей картинки в функции onImageLoaded(e:Event)?

Старый 13.02.2011, 14:34
GemiBillyBob вне форума Посмотреть профиль Отправить личное сообщение для GemiBillyBob Найти все сообщения от GemiBillyBob
  № 3  
Ответить с цитированием
GemiBillyBob

Регистрация: Aug 2010
Адрес: Харьков, Украина
Сообщений: 42
Я б сделал так (убрал лишнее):
Код AS3:
				imageLoader = new BulkLoader("id555");
for (var i:Number = 0; i < my_total; i++) {
 
				var img_url:String = my_images[i].img; //7 изображений с разными именами
				var imageId:String = my_images[i].id; //1,2,3,4,5,6,7
 
 
				imageLoader.add(img_url, { id:imageId } );
 
 
			}
				imageLoader.addEventListener(BulkLoader.COMPLETE, onImageLoaded);
				imageLoader.start();
, а потом бы циклом getImage бы делал. А так получается, что каждый новый инстанс перезаписывает старый imageLoader и поэтому наверное оно так кривовато работает и вообще не очень смотрится.

Попробовал, всё правильно - в булклоадер удобно сначала надобавлять всё что нужно грузить (в один и тот же экземпляр), потом start(). Он тогда всё нормально загрузит и Complete будет после полной загрузки. А чтоб грузить не всё сразу, там же другой метод — не start(), а loadNow() или чтото такое.


Последний раз редактировалось GemiBillyBob; 13.02.2011 в 14:50.
Старый 13.02.2011, 14:48
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 4  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
А это ничего, что вы создаёте несколько экземпляров BulkLoader?

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

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
fljot +1)
Код AS3:
		public function initProjects():void {
				imageLoader = new BulkLoader("imageLoader");
			for (var i:Number = 0; i < my_total; i++) {
				imageLoader.add(my_images[i].img/*, { id: my_images[i].id } */)addEventListener(BulkLoader.COMPLETE, onImageLoaded);
			}
				imageLoader.start();							
		}
можно как то так попробовать) собсна так же немного не понятно зачем вам ИДшники для итемов, если у вас есть масив ссылок, я обычно по ним беру все.
Цитата:
upd2: И еще, если заметили, почему то булклоадер грузит изображения как ему захочеться.)) В данном случае хаотично.. Не 1,2,3...n, а 5,2,6...1
грузит не как захочется в параллельно, то есть все сразу, а дальше кто первый загрузился тот кинул ивент и тут дааалеко не всегда все работает в порядке очереди, если хотите что бы все было по порядку то грузите последовательно, или же вешайте листенер окончания непосредственно на лоадер, он кинет ивент что все загрузилось когда все файлы будут загружены.


Последний раз редактировалось nOobCrafter; 13.02.2011 в 15:37.
Старый 13.02.2011, 16:24
sweet_fighter вне форума Посмотреть профиль Отправить личное сообщение для sweet_fighter Найти все сообщения от sweet_fighter
  № 6  
Ответить с цитированием
sweet_fighter
 
Аватар для sweet_fighter

Регистрация: Apr 2008
Адрес: Kiev, Ukraine
Сообщений: 43
Отправить сообщение для sweet_fighter с помощью ICQ
Цитата:
fljot: А это ничего, что вы создаёте несколько экземпляров BulkLoader?
создаю ведь их с разными id. Или это id чисто для меня? и никак не влияет на выполнение..

все, получилось. =) Спасибо вам.
Выкладываю, может кому пригодится, кто будет искать.

Код AS3:
public function Projects():void 
{	
loader.add("xml/projects.xml", { id:"xml" } );
//TODO: Make Progress
loader.addEventListener(BulkLoader.COMPLETE, onXMLLoaded);
loader.start();
}
 
public function onXMLLoaded(e:Event):void 
{
	myXML = loader.getXML("xml");
	my_images = myXML.item;
	my_total = my_images.length();
	initProjects();
}
public function initProjects():void {			
	imageLoader = new BulkLoader("imageLoader");
		for (var i:Number = 0; i < my_total; i++) {
			var img_url:String = my_images[i].img;
			imageLoader.add(img_url, { id: i } ).addEventListener(BulkLoader.COMPLETE, onImageLoaded);				
		}
	imageLoader.start();
}
public function onImageLoaded(e:Event):void {
	imgBitmap = imageLoader.getBitmap(e.currentTarget.id);
	imgBitmap.x = 200 * e.currentTarget.id;
	addChild(imgBitmap);
}


Последний раз редактировалось sweet_fighter; 13.02.2011 в 17:07.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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