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

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

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

Регистрация: Sep 2007
Сообщений: 117
По умолчанию Как контролировать очередность загрузки?

Допустим у нас есть два swf ролика, которые надо загрузить (сначало первый, потом второй).
Создаем для каждого лоадер и к каждому лоадеру прикрепляем слушатель COMPLITE.
Но если первый ролик тяжелее второго, тогда событие COMPLETE для второго ролика сработает раньше, чем для первого.
Как можно контролировать эту очередность?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну так и загружайте сначала первый, а уже ПОТОМ второй. Для чего Вам события то даны? Как раз для того чтобы знать, что "первый ролик загрузился" и можно начинать загрузку второго.
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2007
Сообщений: 117
Как я могу узнать, что загрузился первый?
Я могу только видеть что запустилась функция, предписанная выполнится после загрузки первого или второго клипа.
Первая функция выполняется после загрузки первого клипа. Вторая - после загрузки второго.
Но так как второй клип загружается раньше, то первой выполняется вторая функция.

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

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
secondSWF.load() запускай в обработчике COMPLETE для первого SWF

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

Регистрация: Sep 2007
Сообщений: 117
А если swf файлов 20 штук или что еще хуже - неизвестное заранее кол-во?

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от inMashine Посмотреть сообщение
Как я могу узнать, что загрузился первый?
Я могу только видеть что запустилась функция, предписанная выполнится после загрузки первого или второго клипа.
Первая функция выполняется после загрузки первого клипа. Вторая - после загрузки второго.
Но так как второй клип загружается раньше, то первой выполняется вторая функция.
Есть всего два метода: один инициализирует загрузку, другой отлавливает событие окончания загрузки. А ещё массив аля:
Код AS3:
[["path2swf1", false],["path2swf2", false], ...]
Где path2swf1 - путь к первой swf, а false - показатель загружали вы первый swf файл или нет. При загрузке первой swf выставляете true в первом методе, а при окончании загрузки во втором методе ищете в массиве элементы с false и опять запускаете первый метод. Как только все элементы будут с true, то загрузка завершена.

Старый 20.08.2010, 14:19
RomECH вне форума Посмотреть профиль Отправить личное сообщение для RomECH Посетить домашнюю страницу RomECH Найти все сообщения от RomECH
  № 7  
Ответить с цитированием
RomECH

Регистрация: Aug 2010
Адрес: Russia, Cheboksary
Сообщений: 50
Отправить сообщение для RomECH с помощью ICQ Отправить сообщение для RomECH с помощью Skype™
создаем array из путей к файлам: ["http://...","http://...",...] создаем request, loader и функцию, которая меняет задание рекуэста на следующий элемент массива и дает задание загрузить снова.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну да, есть параллельная загрузка с проверкой "все ли загрузилось".
Есть так же последовательная загрузка, когда каждый следующий элемент грузится только после окончания загрузки предыдущего, и есть их "симбиоз", когда элементы грузятся потоками, например одновременно в процессе находятся три параллельных загрузки, менеджер потоков следит за каждым отдельно и распределяет оставшиеся элементы по потокам (а фактически просто отдает следующий элемент массива освободившемуся лоадеру, помечая его как "в процессе", а по окончании загрузки - как "загруженный").
inMashine, не может быть "неизвестно заранее". В любом случае есть массив адресов, которые грузить - неважно, каким образом полученный, допустим из XML файла. Назовем его _loaderQueue. Создаем также массив, в который будем складывать загруженный контент (например Битмапы), назовем его _images. Делаем рекурсию из двух функций, и вперед
Код AS3:
private function loadIcon(url:String):void
{
	_iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, nextQueue);
	_iconLoader.load(new URLRequest(url));
}
 
private function nextQueue(event:Event):void
{
	_images.push(event.target.content as Bitmap);
	if (_images.length < _loaderQueue.length)
	{
		loadIcon(_loaderQueue[_images.length]);
	}
	else 
	{
		dispatchEvent(new Event(Event.COMPLETE));
	}
}
// стартуем загрузку (где-то в другом методе этого класса)
...   loadIcon(_loaderQueue[0]);  ...
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2007
Сообщений: 117
Пасибо всем.

To RomECH:
Если вы попробуете сделать свой класс по шаблону, коорый вы предложили, то сталкнетесь с проблемой, описанной мною в первом посте.

Идея с двумерным массивом - это единственно возможный вариант на мой взгляд. ( хотя наверное существуют и более хитрые решения ).

To Wolsh:

Не могли бы вы написать к кому в вашем примере нужно прикреплять слушатель этого события:
Код AS3:
dispatchEvent(new Event(Event.COMPLETE));


Последний раз редактировалось inMashine; 22.08.2010 в 02:21.
Старый 22.08.2010, 12:06
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Если этот код - в отдельном классе, то к экземпляру этого класса. А если Вы пытаетесь написать весь код в одном кадре таймлайна, то и нет особого смысла диспатчить событие - можно запустить нужный метод напрямую. Смысл в том, что в этом месте вся загрузка очереди закончилась, теперь делайте что хотите. Это же шаблонный код просто для примера, костяк так сказать, а мясо наращивать Вам.
Ну вот смотрите (немного ООП):
Допустим у Вас что-то типа фотогалереи. Флэшка загружается в клиент и запрашивает список фотографий на сервере. Получает xml-файл, парсит его и создает массив - список адресов картинок (массив может быть многомерный и содержать дополнительную инфу по картинкам, мы это не трогаем сейчас). В принципе это - отдельный блок задач, и вполне уместно сделать отдельный Объект в понятии ООП - Класс XMLLoader. Его экземпляр загрузит и распарсит xml-ку, подготовит данные для загрузки (и информационного сопровождения) картинок. Закончив, он диспатчит событие "список готов". У Вас в коде основного класса есть подписка на это событие от этого экземпляра XMLLoader'а, выполняется метод, запускающий загрузку изображений. В этом методе Вы создаете экземпляр другого Объекта - Класса ImageLoader, и подписываетесь на событие COMPLETE от него. Отдаете ему список адресов и говорите "грузи". Экземпляр загружает все изображения как описано в предыдущем посте, складывает их в какое-то хранилище с открытым доступом и диспатчит событие COMPLETE. Основной класс получает это событие и запускает обработчик, вызывающий уже дальнейшие действия по демонстрации этих изображений.
Для того и нужны классы, что они представляют из себя логические блоки, делающие какую-то определенную работу (специализация). Другим классам не надо ничего знать о их способах работы и устройстве (инкапсуляция). В этом простейшем примере есть Основной класс Main, который руководит парадом, он как штаб - получает сводки о происходящем и на сновании событий отдает приказы.
- Загрузить xml-ку!
(проходит время)
- "xml-ка загружена!" (XMLLoader.COMPLETE)
- Загрузить картинки из списка xml!
(проходит время)
- "Картинки загружены!" (ImageLoader.COMPLETE)
- Показать загруженные картинки!
Ни один из этих классов понятия не имеет, что происходит "внутри" другого. Каждый выполняет свою работу, и, закончив, отчитывается штабу Main. Main "забирает" результат (обычно доступ к нему организуется через геттер data, т.е. для Main, получившего событие event - event.target.data) и поручает его следующему батальону со специальным назначением.
Надеюсь я ответил на Ваш вопрос..)))
__________________
Reality.getBounds(this);

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

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

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


 


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


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