Постарался дать как можно более подробные комментарии к каждой операции. Код переделывал на лету, так что могут быть ошибки.

Код:
var pArray:Array = new Array("a.jpg", "b.jpg", "c.jpg"); //собстно наш массив в котором хранятся имена подгружаемых мувиков. Забивается или в цикле, можно имена из xml брать - это уже по вкусу.
var counter = 0; //обнуляем счетчик
_root.createTextField("preloader", 11111, 10, 10, 150, 20); //создаем текстовое поле для прелоадера
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth()); //мувик контейнер
function ImageLoader(image:String, target_mc:MovieClip, init:Object) { //собстно функция загрузки
var listenerObject:Object = new Object(); //объявляем слушатель
listenerObject.onLoadInit = function(target) {//по появлению мувика на сцене первым делом
counter--;// уменьшаем счетчик на единицу
if(counter>=0){ // если счетчик мувиков больше или равен 0, то
loadImage(); // продолжаем загрузку
} else {
finish(); // все - тут пишем че делать после того как все загрузится (ф-цию finish дописать по вкусу)
}
};
listenerObject.onLoadProgress = function(target) { //обрабатываем процесс загрузки
_root.preloader.text = bytesLoaded + " bytes of " + bytesTotal; // выводим статус загрузки в поле preloader
};
var mc:MovieClipLoader = new MovieClipLoader(); // создаем объект класса MovieClipLoader()
mc.addListener(listenerObject); //вешаем ему ранее описаного слушателя
mc.loadClip(image, target_mc); //начинаем закачку
};
function loadImage() { //тут мы в цикле вызиваем ф-цию ImageLoader подсовывая ей каждый раз новый мувик.
container.createEmptyMovieClip("pic" + counter, counter); // создаем в контейнере новый мувик
ImageLoader(pArray[counter], container["pic"+counter]);// вызываем ImageLoader с нужными нам параметрами
};
loadImage(); //стартуем
function finish() {
trace("Yatta!");
}