Фотки грузим последовательно, одна за одной и прелоадер это отображает, и пока все фотки не загрузятся ничего не будет. Присутствуют прилоадеры для хмл и фоток.

Код AS1/AS2:
var img:Array = new Array(); // делаем пустые массивы для работы с ними
var title_pic:Array = new Array(); // в них будем вносить разную информацию из хмл листа
var des:Array = new Array(); // например название фотки, путь к ней, различные коментарии..
var i:Number = 0; // вводим переменную для подсчета чего-либо
var total:Number;// вводим переменную для подсчета записей в хмл
var stage_width:Number = Stage.width; // переменная для определения размеров сцены
var stage_height:Number = Stage.height; // переменная для определения размеров сцены
// эти 2 переменные я использовал для дальнейшей работы с приложением, вы можете их просто заменить на размеры сцены, кому что удобнее.
//Подключаемся к XML
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("myPics.xml");
function createNewMc(i) // функция создания пустых мувиков для картинок
{
mc = hmc.createEmptyMovieClip('loader_'+ i, i); //создаем в мувике контейнере превьюшек мувики для каждой фотографии
mc._x = stage_width * i;// ставим их в порядке один за другим, умножаем на размер фотки
//З.Ы. у меня получилась 1 большая фотка размеров со "сцену", вы можете поставить свой размер
pic = mc.createEmptyMovieClip('pic', i); // в принципе что бы центрировать фотку, мы делаем еще один клип контейнер и его уже центрируем %)
}
///////////-------------------- Прелоадер для хмл-----------------------///////////
xml_progressBar_mc = _root.createEmptyMovieClip("xml_progressBar_mc", _root.getNextHighestDepth());
xml_progressBar_mc.createEmptyMovieClip("bar_mc", _root.xml_progressBar_mc.getNextHighestDepth());
xml_progressBar_mc.createEmptyMovieClip("stroke_mc", _root.xml_progressBar_mc.getNextHighestDepth());
with (xml_progressBar_mc.stroke_mc) {
lineStyle(0, 0xFFFFFF, 70);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 5);
lineTo(0, 5);
lineTo(0, 0);
}
with (xml_progressBar_mc.bar_mc) {
beginFill(0x99FF00, 100);
moveTo(0, 2);
lineTo(100, 2);
lineTo(100, 4);
lineTo(0, 4);
lineTo(0, 2);
endFill();
_xscale = 0;
}
xml_progressBar_mc._visible = false; // рисуем прогресс-бар для хмл
xml_load_tf = _root.createTextField('xml_load_tf', _root.getNextHighestDepth(), 0, 0, 100, 22);
xml_load_tf.selectable = false;
xml_load_tf._x = (stage_width - xml_load_tf._width) / 2;
xml_load_tf._y = (stage_height - xml_load_tf._height) / 2;
var my_fmt:TextFormat = new TextFormat();
my_fmt.color = 0xFFFFFF;
my_fmt.size = 12;
my_fmt.font = "Trebuchet MS"; // создаем тектовое поле прогресс-бара
onEnterFrame = function()
{
var loaded = myXML.getBytesLoaded() + _root.getBytesLoaded();
var total = myXML.getBytesTotal() + _root.getBytesTotal();
var percent = Math.round( loaded / total * 100);
if( !isNaN(percent))
{
xml_load_tf.text = "Загрузка XML";//"Загружено " + percent + "%";
xml_load_tf.autoSize = true;
xml_load_tf.setTextFormat(my_fmt);
xml_load_tf._x = (stage_width - xml_load_tf._width) / 2;
//trace(percent)
xml_progressBar_mc._visible = true;
xml_progressBar_mc._x = (stage_width - 100) / 2;
xml_progressBar_mc._y = xml_load_tf._y + xml_load_tf._height + xml_progressBar_mc._height;
xml_progressBar_mc.bar_mc._xscale = percent;
} else {
xml_load_tf.text = "Загрузка XML";
xml_load_tf.autoSize = true;
xml_load_tf.setTextFormat(my_fmt);
}
if ( loaded == total) // когда все загружено
{
delete onEnterFrame;
xml_progressBar_mc.removeMovieClip(); // удаляем что не нужно
xml_load_tf.removeTextField();
}
} // прелоадер
myXML.onLoad = function(success) // когда хмл лист загружен проверяем
{
if (success) // если он загружен то выполняем что нам надо, если нет то выводим сообщение об ошибке, но это ниже
{
var nodes = this.firstChild.childNodes;
total = nodes.length; // узнаем количество записей (картинок)
for (i = 0; i < total; i++)
{
title_pic[i] = nodes[i].attributes.title; // пробегаемся по хмл-файлу, считываем что нам нужно
img[i] = nodes[i].attributes.img; // и заносим все данные в соответствующие массивы,
des[i] = nodes[i].attributes.description; // для дальнейшей работы с ними
}
///////////------------------- Грузим фотки -----------------------///////////
hmc = createEmptyMovieClip('holder_mc', 1); // создаем мувик, который будет содержать все картинки нашей галлереи
/// Создаем столько мувиков с картинками, сколько собственно картинок в XML
for (i = 0; i < total; i++)
{
createNewMc(i); // функция создания пустых мувиков для картинок
}
progressBar_mc = _root.createEmptyMovieClip("progressBar_mc", _root.getNextHighestDepth()); // тут будем делать прилоадер для загрузки картинок
progressBar_mc.createEmptyMovieClip("bar_mc", _root.progressBar_mc.getNextHighestDepth()); // в силу того что прелоадер должен быть маленьким - просто
progressBar_mc.createEmptyMovieClip("stroke_mc", _root.progressBar_mc.getNextHighestDepth()); // рисуем его, пример их хелпа)
with (progressBar_mc.stroke_mc) { // рисуем рамку
lineStyle(0, 0xFFFFFF, 70);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 5);
lineTo(0, 5);
lineTo(0, 0);
}
with (progressBar_mc.bar_mc) { // рисуем сам прогрессбар
beginFill(0xFF0000, 100);
moveTo(0, 2);
lineTo(100, 2);
lineTo(100, 4);
lineTo(0, 4);
lineTo(0, 2);
endFill();
_xscale = 0;
}
progressBar_mc._visible = false;
load_tf = _root.createTextField('load_tf', _root.getNextHighestDepth(), 0, 0, 100, 22); // создаем тектовое поле прогресс-бара
load_tf.selectable = false;
load_tf._x = (stage_width - load_tf._width) / 2;
load_tf._y = (stage_height - load_tf._height) / 2;
var my_fmt:TextFormat = new TextFormat();
my_fmt.color = 0xFFFFFF;
my_fmt.size = 12;
my_fmt.font = "Trebuchet MS";
// Создаем слушатель чтоб наблюдать за загрузкой превьюх
var loaderListener:Object = new Object();
loaderListener.onLoadStart = function(holderClip:MovieClip) {}; // тут перечисляются события загрузки
// все их описывать небуду, просто приведу что начинается со старта, и использую что нам надо, остальное можно взять в хелпе
loaderListener.onLoadProgress = function(holderClip:MovieClip, loadedBytes:Number, totalBytes:Number):Void // в момент загрузки картинок...
{
var percent:Number = Math.round((i + loadedBytes / totalBytes) * 100 / total); // вычисляем количество загруженых байт превьюхи
load_tf.text = "Загрузка изображений";//"Загружено " + percent + "%"; // если хотим что бы отображалось попроцентно то вместо надписи пишем то что в коментарии
load_tf.autoSize = true; // применяем расширение к тексту
load_tf.setTextFormat(my_fmt); // применяем текстформат
load_tf._x = (stage_width - load_tf._width) / 2; // расоплогаем по оси х (центрируем)
progressBar_mc._visible = true; // выводим прогрессбар
progressBar_mc._x = (stage_width - 100) / 2; // центрируем его
progressBar_mc._y = load_tf._y + load_tf._height + progressBar_mc._height;
progressBar_mc.bar_mc._xscale = percent; // чем больше процент загрузки тем больше полоска
};
loaderListener.onLoadInit = function(mc:MovieClip) // когда загрузка завершена
{
i++ // вот тут, уже i = 1 и дальше его увеличиваем
imageLoader.loadClip(img[i], hmc['loader_' + i].pic); // берем нужную превью из массива и загружаем в нужный мувик
if ( i == total) // когда загружены ВСЕ картинки
{
progressBar_mc.removeMovieClip(); // удаляем что не нужно
load_tf.removeTextField();
// тут же уже можно писать что будет после того как фотки загрузятся, допустим переход на второй кадр или что то такое.
}
mc.img_width = mc._width; // получаем размеры фоток;)
mc.img_height = mc._height; // получаем размеры фоток;) // так же тут уже можно центрировать нашу картинку, или выровнять по другому
};
////// Загружем картинки в мувик контейнер
var imageLoader:MovieClipLoader = new MovieClipLoader();
imageLoader.addListener(loaderListener);
imageLoader.loadClip(img[0], hmc['loader_' + 0].pic); // берем первую картинку из массива и загружаем в нужный мувик
i = 0; // тут ставим число картинок в 0, потому что при загрузке мы будем их считать опять.
} else { // если же загрузки хмл небыло то
createTextField("error", this.getNextHighestDepth(), 0, 0, 120, 20); // делаем текстовое поле с ошибкой
error.selectable = false;
var my_fmt:TextFormat = new TextFormat();
my_fmt.color = 0xFF0000;
my_fmt.size = 12;
my_fmt.font = "Trebuchet MS";
error.text = "Sorry, but XML-file is not loaded!";
error.autoSize = true;
error.setTextFormat(my_fmt);
error._x = (stage_width - error._width) / 2;
error._y = (stage_height - error._height) / 2;
}
по хорошему надо грузить так. Это пример загрузки с использованием хмл листа.