BulkLoader – замена Loader’у
Сентябрь 30, 2008
Download: http://code.google.com/p/bulk-loader/
ASDocs: http://www.stimuli.com.br:8080/media/projects/bulk-loader/docs/
BulkLoader – это класс позволяющий загружать различные данные (картинки, swf, xml и т.д.) одновременно, без необходимости создания loader’a для каждого запроса. Например, нам необходимо сделать каркас сайта (прелоадер для всех разделов):
import br.com.stimuli.loading.BulkLoader;
var loader:BulkLoader = new BulkLoader("main-site");
//Создавая BulkLoader c именем "main-site" в другом месте, мы можем получить загруженные здесь файлы
private var itemName:String ="";
private var lastItem:String="";
//Имя выбранного раздела сайта (также имя файла swf)
private var lastShowedItem:String = "";
//Последняя флешка добавленная на сцену
private var lastPriority:int = 0;
//Приоритет загрузки (хранит последнее значение)
private var preloader:Preloader = new Preloader();
//Кастомный прелоадер (см. функцию showProgress)
public function show(prmItemName:String):void{
itemName = prmItemName;
showItem();
}
private function showItem(e:Event = null):void {
if(lastItem != itemName){
//Выбрали другой раздел
if (lastShowedItem != ""){
container.removeChild(loader.getMovieClip(lastShowedItem));
//также есть функции getXML, getBitmap, getBitmapData, getSound и т.п.
lastShowedItem ="";
}
if (loader.get(itemName) != null) {
//Загрузка начиналась до этого
if (loader.get(itemName).isLoaded == true) {
//Загрузка прошла - добавим на сцену
if (this.contains(preloader)) {
removeChild(preloader);
}
container.addChild(loader.getMovieClip(itemName));
lastShowedItem = itemName;
} else {
//Загрузка для данного раздела не завершена
//Продолжим с высшим приоритетом
if (!this.contains(preloader)) {
addChild(preloader);
}
lastPriority++;
loader.changeItemPriority(itemName, lastPriority);
}
} else {
//Начала загрузки не было - запустим
if (!this.contains(preloader)) {
addChild(preloader);
}
lastPriority++;
loader.add(itemName + ".swf", { id: itemName, priority:lastPriority } );
loader.get(itemName).addEventListener(Event.COMPLETE, showItem);
//Метод get позволяет добавлять события отдельно для каждого процесса
loader.get(itemName).addEventListener(ProgressEvent.PROGRESS, showProgress);
loader.start();
}
lastItem = itemName;
}
}
private function showProgress(e:ProgressEvent = null):void {
//Общая функция прогресса загрузки
if (loader.get(lastItem).isLoaded != true) {
preloader.progress(loader.get(lastItem).bytesLoaded , loader.get(lastItem).bytesTotal);
}
}
Код довольно понятный и не требует изменения при увеличении или уменьшении количества разделов.