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

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

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

Регистрация: Jun 2009
Сообщений: 15
По умолчанию Подгрузка картинок и их отображение на экране

Здравствуйте!
По мере изучения флеш и написания небольших учебных приложений возник вопрос:
Хочу подгрузить несколько внених картинок и отобразить их на экране.
Написал такой код:
Код AS3:
package {
	import flash.display.*;
	import flash.net.*;
	import flash.events.*;
	import flash.system.*;
 
	public class pictures extends Sprite {
		public var loadEvent: Loader = new Loader();
		public var loaders: Array = new Array();
		public var urlRequest: URLRequest;
		public var i = 0;
 
		public function pictures () {					
				urlRequest = new URLRequest;			
 
				for (i = 0; i<=1; i++) {
					urlRequest.url = i+".jpg";
					loaders[i] = new Loader();					
					loaders[i].contentLoaderInfo.addEventListener(Event.INIT, initListener);			
					loaders[i].load(urlRequest);				
				}
 
 
		}
 
		public function initListener (e:Event):void {
			addChildAt(loaders[i].content, i);
		}
	}
 
}
То есть, к примеру, имеем две картинки 0.jpg и 1.jpg загружаем их и отображаем на экране.
Выдает ошибку: TypeError: Error #1010: Термин не определен и не имеет свойств.
at pictures/initListener()
Заметил, если закомментировать строку с addEventListener то не выдает ошибку но естественно не вызывается функция-обработчик прерывания.

Не очень силен в теории, но так и не нашел комментариев, нужно ли все таки вешать событие обработчик на каждый экземпляр Loader'a или нет. Если нужно вешать только на один то на какой именно.

Вообщем буду благодарен, если знающие люди прояснят ситуацию по этим вопросам.

Старый 28.07.2009, 00:40
Dimax4d вне форума Посмотреть профиль Отправить личное сообщение для Dimax4d Найти все сообщения от Dimax4d
  № 2  
Ответить с цитированием
Dimax4d
 
Аватар для Dimax4d

Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
Так?

Код AS3:
loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, initListener);

Старый 28.07.2009, 01:32
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 3  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от ostashko Посмотреть сообщение
Код AS3:
			public function pictures () {					
				urlRequest = new URLRequest;			
 
				for (i = 0; i<=1; i++) {
					urlRequest.url = i+".jpg";
					loaders[i] = new Loader();					
					loaders[i].contentLoaderInfo.addEventListener(Event.INIT, initListener);			
					loaders[i].load(urlRequest);				
				}
 
 
		}
 
		public function initListener (e:Event):void {
			addChildAt(loaders[i].content, i);
		}
если нужнопросто загрузить и отобразить картинку - чем не устраивает, просто:
Код AS3:
		public function pictures () {					
				urlRequest = new URLRequest;			
 
				for (i = 0; i<=1; i++) {
					urlRequest.url = i+".jpg";
					loaders[i] = new Loader();					
 
					loaders[i].load(urlRequest);
					this.addChildAt(loaders[i], i);
				}
			}
?
+ loaders[i] заменить на локальную переменную для улучшения производительности

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
public function initListener (e:Event):void {
    addChildAt(loaders[i].content, i);
    addChild(LoaderInfo(e.target).content);
}

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

Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
Я так писал:

Код AS3:
addChild(e.target.loader.content)
Думал, что content только у Loader есть, сейчас посмотрел хелпе, был не прав


Последний раз редактировалось Dimax4d; 28.07.2009 в 01:53.
Старый 28.07.2009, 01:53
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Есть и у LoaderInfo.

ps: проверял лично =)

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

Регистрация: Jun 2009
Сообщений: 15
switcher!, udaaff, Dimax4d
Спасибо, все заработало. А все же для информации: почему не работал мой вариант?

Старый 28.07.2009, 02:27
Dimax4d вне форума Посмотреть профиль Отправить личное сообщение для Dimax4d Найти все сообщения от Dimax4d
  № 8  
Ответить с цитированием
Dimax4d
 
Аватар для Dimax4d

Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
Цитата:
почему не работал мой вариант?
Из справки Adobe:

Цитата:
init событие
Отправляется, когда свойства и методы загруженного SWF-файла становятся доступны и готовы к использованию. Содержимое, однако, может продолжать загружаться. Объект LoaderInfo отправляет событие init, когда выполняются два следующих условия:
Доступны все свойства и методы, связанные с загруженным объектом и с объектом LoaderInfo.
Завершена работа конструкторов для всех дочерних объектов.
Код ActionScript в первом кадре основной временной шкалы загруженного SWF-файла был полностью выполнен.

Например, событие Event.INIT отправляется после загрузки первого кадра ролика или анимации. Тогда ролик становится доступным и может быть добавлен в список отображения. Загрузка ролика полностью, однако, может занять больше времени. Событие Event.COMPLETE отправляется только при полной загрузке ролика.

Событие init всегда предшествует событию complete....
У тебя же не SWF, наверно поэтому и не работает

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

Регистрация: Jun 2009
Сообщений: 15
Что-то не совсем понимаю, событие то осталось тоже самое, просто по-другому из функции обработчика обращаемся к загруженному содержимому, вместо: addChildAt(loaders[i].content, i); пишем: addChild(LoaderInfo(e.target).content);

Старый 28.07.2009, 02:47
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 10  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от udaaff Посмотреть сообщение
Код AS3:
    addChild(LoaderInfo(e.target).content);
}
а что делает LoaderInfo(e.target)? Т.е. если у класса Loader, существует метод Loader(). То вот у LoaderInfo я такого метода в хелпе не нашел... хотя там же приводится пример использования LoaderInfo()

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

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

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


 


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


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