![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
Допустим у нас есть два swf ролика, которые надо загрузить (сначало первый, потом второй).
Создаем для каждого лоадер и к каждому лоадеру прикрепляем слушатель COMPLITE. Но если первый ролик тяжелее второго, тогда событие COMPLETE для второго ролика сработает раньше, чем для первого. Как можно контролировать эту очередность? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну так и загружайте сначала первый, а уже ПОТОМ второй. Для чего Вам события то даны? Как раз для того чтобы знать, что "первый ролик загрузился" и можно начинать загрузку второго.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
Как я могу узнать, что загрузился первый?
Я могу только видеть что запустилась функция, предписанная выполнится после загрузки первого или второго клипа. Первая функция выполняется после загрузки первого клипа. Вторая - после загрузки второго. Но так как второй клип загружается раньше, то первой выполняется вторая функция. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
|
secondSWF.load() запускай в обработчике COMPLETE для первого SWF
|
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
А если swf файлов 20 штук или что еще хуже - неизвестное заранее кол-во?
|
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
Где path2swf1 - путь к первой swf, а false - показатель загружали вы первый swf файл или нет. При загрузке первой swf выставляете true в первом методе, а при окончании загрузки во втором методе ищете в массиве элементы с false и опять запускаете первый метод. Как только все элементы будут с true, то загрузка завершена. |
|
|||||
|
создаем array из путей к файлам: ["http://...","http://...",...] создаем request, loader и функцию, которая меняет задание рекуэста на следующий элемент массива и дает задание загрузить снова.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну да, есть параллельная загрузка с проверкой "все ли загрузилось".
Есть так же последовательная загрузка, когда каждый следующий элемент грузится только после окончания загрузки предыдущего, и есть их "симбиоз", когда элементы грузятся потоками, например одновременно в процессе находятся три параллельных загрузки, менеджер потоков следит за каждым отдельно и распределяет оставшиеся элементы по потокам (а фактически просто отдает следующий элемент массива освободившемуся лоадеру, помечая его как "в процессе", а по окончании загрузки - как "загруженный"). inMashine, не может быть "неизвестно заранее". В любом случае есть массив адресов, которые грузить - неважно, каким образом полученный, допустим из XML файла. Назовем его _loaderQueue. Создаем также массив, в который будем складывать загруженный контент (например Битмапы), назовем его _images. Делаем рекурсию из двух функций, и вперед 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); |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 117
|
Пасибо всем.
To RomECH: Если вы попробуете сделать свой класс по шаблону, коорый вы предложили, то сталкнетесь с проблемой, описанной мною в первом посте. Идея с двумерным массивом - это единственно возможный вариант на мой взгляд. ( хотя наверное существуют и более хитрые решения ). To Wolsh: Не могли бы вы написать к кому в вашем примере нужно прикреплять слушатель этого события: Последний раз редактировалось inMashine; 22.08.2010 в 02:21. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: 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, время: 16:03. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|