as3 - Предварительная загрузка галереи изображений XML - PullRequest
0 голосов
/ 01 октября 2009

У меня есть класс галереи изображений, который загружает эскизы и полные изображения один за другим в цикле. Затем я помещаю их в массив и создаю один фрагмент ролика с каждым растровым изображением. Работает хорошо.

В какой части этого процесса я могу предварительно загрузить все изображения, прежде чем отобразить всю галерею?

Thanx!

1 Ответ

1 голос
/ 01 октября 2009

Лично я большой поклонник классной BulkLoader библиотеки:

  • Это невероятно гибкий
  • Предоставляет полезные помощники для доступа к загруженным ресурсам (например, getBitmap ("asset_id") возвращает типизированный объект)
  • Это дает значимую обратную связь о прогрессе (значения могут быть необязательно возвращены, чтобы отражать прогресс по общему «весу», в отличие от необработанного значения из отдельных файлов, которые могут значительно различаться по размеру)
  • Он обрабатывает одновременную загрузку (которая, очевидно, быстрее, чем последовательная загрузка).

В качестве альтернативы, если вы хотите прокрутить собственное решение во время цикла, добавьте прослушиватель событий в уведомление

Event.COMPLETE
. В обработчике этого события увеличиваем счетчик; как только этот счетчик станет равным количеству элементов, которые вы загрузили, все ваши активы.

Псевдо-код:

var loadCounter:int = 0;

var img_arr:Array = [
    "img1_thumb.jpg", "img1.jpg", 
    "img2_thumb.jpg", "img2.jpg", 
    ... 
];
var image_num:int = img_arr.length;

var ldr:Loader;
var req:URLRequest;
var path:String;
var i:int   = 0;
for(; i < image_num; i++) 
{
     path = "http://myserver.com/images/" + img_arr[i];
     req  = new URLRequest(path);
     ldr  = new Loader();
     ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, _onLoadComplete);
     ldr.load(req);
}

private function _onLoadComplete(event:Event):void
{
    if(++loadCounter == image_num)
    {
        // do whatever you need to your loaded assets
    }
}
...