Я делал так, вроде хорошо работает

Код AS3:
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class AssetManager extends MovieClip
{
var assets_url:Array;
var assets:Array;
var loading:Number;
public function AssetManager()
{
assets = new Array;
assets_url = new Array;
loading = 0;
}
/**
*
* @param url
*/
public function add(url:String, name:String):void
{
loading++;
assets_url[name] = url;
}
/**
* Получить загруженный asset
* @param name
* @return
*/
public function get(name:String)
{
var asset:AssetLoad = AssetLoad(assets[name]);
return asset.clone();
}
/**
*
* @param e
*/
public function decrimentLoader(e:Event):void
{
loading--;
if (loading <= 0)
{
dispatchEvent(new Event(Event.COMPLETE));
}
}
/**
* Запустить загрузку всех ресурсов
*/
public function loadAssets():void
{
for (var name:String in assets_url)
{
var asset:AssetLoad = new AssetLoad(assets_url[name], name);
asset.addEventListener(Event.COMPLETE, decrimentLoader);
assets[name] = asset;
}
}
}

Код AS3:
package
{
import flash.display.*;
import flash.events.Event;
import flash.net.URLRequest;
/**
* ...
* @author
*/
public class AssetLoad extends MovieClip
{
public var loader:Loader;
public var bitmapData:BitmapData;
public function AssetLoad(file:String, name:String = null):void
{
loader = new Loader;
loader.name = name;
loader.load(new URLRequest(file));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.onLoaderComplite);
}
/**
* Дубликат
*/
public function clone() {
var mc:MovieClip = new MovieClip();
mc.addChild( new Bitmap(bitmapData));
return mc;
}
public function onLoaderComplite(event:Event):void
{
var loader:Loader = event.target.loader as Loader;
bitmapData = Bitmap(loader.content).bitmapData.clone();
//loader.cacheAsBitmap = true;
addChildAt(clone(), 0);
//loader = null;
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, this.onLoaderComplite);
dispatchEvent( new Event(Event.COMPLETE));
}
}
}