![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Есть приложение у меня в котором туча картинок. и они загружаются одновременно..
как реализовать чтобы картинки грузились только те которые видны на экране, а те которые за экраном (т.е. скрол не дошел до этих картинок ... т.е. MovieClip содержащий эти картинки не поднялся вверх на достаточном уровне) стопорились и не грузились чтобы не нагружать скорость... вот такой вариант правильный? у меня не работает он: Цитата:
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
|
Зачем в каждой картинке?
Моё решение: есть XML(с адресами картинок) или просто куча ссылок на картинки в массиве. далее, считаем сколько картинок у нас должно подгрузиться. Т.е. если XML считаем детей-родителей(что у тебя там) или атрибуты с адресами и получаем массив адресов. дале: подгружая их по очереди одним enterFrame и по окончанию массива ремовим лстенер. т.е.: public function AllLoader (args:String):void { // args - XML адресов которые нужно подгрузить. loadFile.load(new URLRequest(args)); loadFile.addEventListener(Event.COMPLETE, loadCompleteXml); loadFile.addEventListener(IOErrorEvent.IO_ERROR, loadErrorXml); } /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// private function loadErrorXml(e:IOErrorEvent):void { trace("Касяк с ХМЛ!!!"); } /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// private function loadCompleteXml(e:Event):void { dataFile = new XML(loadFile.data); // Вырубаем загрузку пока не загрузиться первый адрес. loadFile.removeEventListener(Event.COMPLETE, loadCompleteXml); // парсим первый адрес и добавляем в массив. // тут малость сложней так как я гружу картинки с атрибутами. // Грузим адрес первой картинку. for (var i:String in dataFile.IMG.@name) { linkImage[i] = [dataFile.IMG[i].@name]; var atrArr:Array = []; // Далее грузим её атрибуты. for (var j:String in dataFile.IMG[i].ARG.attributes()) { atrArr.push(dataFile.IMG[i].ARG.attributes()[j]); } atrImage[i] = atrArr; } // говорим что парсинг окончен и можно продолжать. loadSwitch = true; addEventListener(Event.ENTER_FRAME, onFrame); } /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// /// Грузим картинку. /////////////////////////////////////////////////////////////// private function onFrame(e:Event):void { if (loadSwitch) { // Зная количество адресов начинаем грузить их по очереди. if (linkImage.length > allImage.length) { var i:int = allImage.length; loadImg.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteImg); loadImg.load(new URLRequest(linkImage[i])); // Запрещаем подгрузку пока не загрузиться первая картинка. // Потом вторая, потом ..... loadSwitch = false; } else { // Загрузилась, отлично! Можно работать с картинками. ready = true; loadSwitch = false; // Вырубаем загрузку т.к. всё выполнено. removeEventListener(Event.ENTER_FRAME, onFrame); } } } Надеюсь помог.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
[+3 18.04.11]
Регистрация: Dec 2010
Сообщений: 342
|
Советую вам библиотеку загрузчика от гринсок:
http://www.greensock.com/loadermax/ Она меня много раз выручала, особенно когда куча загружаемых элементов. |
|
|||||
|
Тоже вариант! Но в моём примере можно показывать только те картинки которые уже подгрузились. А как я вижу в их работе, картинки грузятся толпой. Но в целом не плохо. Идея моего решения была в ином. Брать только те картинки которые я захочу из тех что подгрузились. Как то так.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Это называется пагинацией.
Грузите только те что должны быть на экране+ столько же про запас. при скролировании - вниз - грузите следующий запас (отображая то что уже загрузилось). Так поступают при загрузке текстур ландшафта в играх с огромными или бесшовными ландшафтами (в том же королевстве, например) Да и вконтакт зайдите и наберите что-нить в поиске видео (типа кошки или порно) - появится список с подгрузкой. при скролле вниз список будет обновляться. Вообще есть подход грузить частями не только картинки, но и информацию о них. т.е. запрашивать что-то вроде: getImageList/imagesOnPage/10/page/0 и уже по нему грузить картинки.
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 27.03.2011 в 13:17. |
|
|||||
|
Спасибо за пример, за ссылку и за теорию.
Попробую что - нибудь сотворить... вариант с greensock как ни к стате подходит. Потому как у меня те картинки, которые выходят за пределы экрана+запас - они удаляются. а greensock умеет загружать по одной(или опр. кол) картинке - в итоге не нужно париться с остановкой загруки. т.к. картинки и так по одной грузятся а неактуальные картинки удаляются с о своими листернами
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
|
По-моемуПагинация - это обычная нумерация страниц. А то про что мы говорим называется пейджинг (paging). По крайней мере в серверсайде это всегда было так. Поправьте если во флеше другие термины.
Цитата:
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
просто пагинация от латинского слова, а пэйджинг от американского. Можно встретить такой код: или
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|