вообще не так давно писал класс, не тестил толком, было сделанно с расчетом на Flash Player 6 так что там нету MovieClipLoader
но грузит много всякой дряни.

Код:
import mx.events.EventDispatcher;
import mx.utils.Delegate;
/**
* Enter description here
*
* @author Nirth
* @version 1.0
* @since
*/
//Event dispatches with interval while loading in progress
[Event("progress")]
//Event dispatches when data is loaded
[Event("complete")]
class com.onorange.lib.utils.MultiLoader {
//initialize event dispatcher
private static var __initED = EventDispatcher.initialize(MultiLoader.prototype);
public var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
//
private var __objectsToLoad:Array;
private var __pathes:Array;
private var __intervalID:Number;
private var __interval:Number;
//
/**
* Constructor, creates instance of MultiLoader
* @usage import com.onorange.lib.utils.MultiLoader
* var loader:MultiLoader = new MultiLoader(50,[_root.mc1,_root.mc1.mc2,_root.mc3],["mc1.swf","mc2.swf","mc3.swf"]);
* function progress(evt:Object):Void {
trace(evt.loaded+"/"+evt.total);
}
loader.addEventListener("progress",onProgress);
* @param interval Number, interval in which <code>progress</code> event will be dispatched
* @param loadArray Array, of objects, in which you want to load media
* @param path Array, of pathes to media
* @return Nothing
*/
public function MultiLoader(interval:Number, loadArray:Array, path:Array) {
//assign variables values
__interval = interval;
__objectsToLoad = loadArray;
__pathes = path;
//start loading
__initLoading(loadArray, path);
//start interval
__intervalID = setInterval(Delegate.create(this, __update), __interval);
}
//private methods
private function __update():Void {
var t:Number = 0;
var l:Number = 0;
for (var i:Number = 0; i<__objectsToLoad.length; i++) {
t += __objectsToLoad[i].getBytesTotal();
l += __objectsToLoad[i].getBytesLoaded();
}
var p:Number = Math.round(l/t*100);
dispatchEvent({type:'progress',loaded:l,total:t,percent:p});
if (p == 100) {
dispatchEvent({type:'complete',loaded:l});
clearInterval(__intervalID);
}
}
private function __initLoading(objects:Array, path:Array):Void {
for (var i:Number = 0; i<objects.length; i++) {
var method:String = (objects[i] instanceof MovieClip) ? "loadMovie" : "loadSound";
objects[i][method](path[i]);
}
}
}
о найденых багах писать сюды