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

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

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

Регистрация: Jul 2011
Сообщений: 11
По умолчанию Как достать данные из события

Делаю загрузчик для картинок, картинок много, поэтому выделяю в отдельный класс. За основу использовал код написанный soniko в одной из тем. В исходном коде картинки сразу же выкладывались, я же стараюсь добыть лоадером по списку адресов массив битмапдата. однако вне события массив пуст, что не удивительно, подскажите как его передать из-под слушателя.

Код AS3:
package {
 
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
 
	/*
		@author soniko
	*/
 
	public class PictureLoader extends Sprite {
 
 		private var count:int;
		private var loadList:Array;
		private var loaderList:Array;
		private var ldr:Loader;
		private var arBitmapdata:Array;
 
 
		public function PictureLoader(loaderList):void {
 
			arBitmapdata = new Array();
			ldr = new Loader();
 
			loadList = loaderList;
			count = loadList.length;
 
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete, false, 0, true);
			loadComplete(null);
			trace(arBitmapdata);
		}
 
 
		private function loadComplete(eve:Event):void {
			if (eve) {
				//super.addChild((eve.target as LoaderInfo).content);
				arBitmapdata.push(eve.target.content.bitmapData.clone());
				loadList.shift();
			}
			if (loadList.length > 0) {
				loadNext(new URLRequest(loadList[0]));
			}
 
		}
 
		private function loadNext (request:URLRequest):void {
			ldr.load(request);
		}
 
	}	
}

Старый 26.07.2011, 14:33
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 2  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
Создайте свое событие с нужными полями (в данном случае с массивом) и по завершении загрузки диспатчите его. ну и соответственно класс заинтересованный в этих картинках должен ловить это событие

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

Регистрация: Jul 2011
Сообщений: 11
мда, вот и взялся изучать as3 простая задача выливается в написании собственного события. А проще?

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

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
Дописать один небольшой класс, что может быть проще?) И на самом деле это очень нужная вещь и рано или поздно все равно придется это делать.
Можете сделать массив публичным свойством и просто доставать оттуда

Старый 26.07.2011, 14:55
godligift вне форума Посмотреть профиль Отправить личное сообщение для godligift Найти все сообщения от godligift
  № 5  
Ответить с цитированием
godligift

Регистрация: Jul 2011
Сообщений: 11
Ну потому что вопрос о простоте, что странно когда любое событие видит массив мой, как наполненный, а любое присвоение во вне это уничтожает.

Добавлено через 3 минуты
и второе я не сильно еще разобрался в событиях as3, чтобы понимать как наследовать поведение complete,

Добавлено через 10 минут
ладно буду разбираться, хотя многие танцы с бубном в as3 меня напрягают. создатели точно не читали принцип не плодите сущностей без надобности

Старый 26.07.2011, 15:10
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>А проще?
Код AS3:
public class PictureLoader extends Sprite
{
 
	private var count:int;
	private var loadList:Array;
	private var arBitmapdata:Array = [];
	private var ldr:Loader;
 
	public function PictureLoader(loaderList:Array):void
	{
 
		loadList = loaderList;
		count = loaderList.length;
 
		ldr = new Loader();
		ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
		loadComplete(null);
 
	}
 
	private function loadComplete(event:Event):void
	{
		if (event)
			arBitmapdata.push(Bitmap(ldr.content).bitmapData.clone());
		count > 0 ? loadNext() : onLoadComlete();
	}
 
	private function loadNext():void
	{
		ldr.load(new URLRequest(loadList[--count]));
	}
 
	private function onLoadComlete():void
	{
		ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
		trace("that's all, arBitmapdata:" + arBitmapdata);
 
	}
 
}

Старый 26.07.2011, 15:21
godligift вне форума Посмотреть профиль Отправить личное сообщение для godligift Найти все сообщения от godligift
  № 7  
Ответить с цитированием
godligift

Регистрация: Jul 2011
Сообщений: 11
Я не уверен что silin меня правильно понял, еще раз повторяю, в любом обработчике событий, вызванном из конструктора класса массив будет полным. мне же необходим массив в самом конструторе. если вы введете trace(arBitmapdata) в конструкторе будет unindefineted

Добавлено через 57 секунд
Единственное прошу подсказать как правильно отнаследовать событие, чтобы оно выполняло функцию Event.COMPLETE

Старый 26.07.2011, 15:28
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 8  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
Я кажется начинаю догадываться. Вы хотите чтобы массив с битмапами был доступен уже в конструкторе чтоле?

Старый 26.07.2011, 15:34
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
мне же необходим массив в самом конструторе. если вы введете trace(arBitmapdata) в конструкторе будет unindefineted
быть такого не может. У вас первая строчка в конструкторе - arBitmapdata = new Array();

И потом, синхронная загрузка невозможна. Любые танцы с бубном не приведут к тому, что вызвав из конструктора метод, вроде ЗагрузитьВсе(), на следующей строке (в конструкторе) вы будете иметь уже загруженые картинки.

Возможно я понял все совсем не так

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

Регистрация: Jul 2011
Сообщений: 11
Да, а зачем иначе мне отдельный класс создавать, подобное я мог и в основном тексте программы(в другом классе) сделать, я хочу себе упростить себе жизнь кардинально. Один раз помучатся и получить хороший лоадер, а не прописывать его везде.

Добавлено через 3 минуты
я понимаю что такое асихронная загрузка, но данный объект я буду создавать в самом начале. Может тогда таймер или что-то подобное... я и прошу помощи.

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

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

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


 


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


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