У меня есть код, который кэширует загруженные ресурсы (как изображения, так и swfs) и сохраняет свои байты во флэш-памяти SharedObject
:
var cache:SharedObject = SharedObject.getLocal('dataCache');
cache.data[url] = (loader.contentLoaderInfo as LoaderInfo).bytes;
Когда есть запрос на загрузку нового ресурса, кодпроверяет, находится ли ресурс в кеше, а затем загружает его байты:
var loader:FlexLoader = new FlexLoader();
// handlers skipped
var lc:LoaderContext = new LoaderContext();
lc.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
if (cache && cache.data[url])
loader.loadBytes(cache.data[url], lc)
else
loader.load(new URLRequest(url), lc);
Проблема: иногда FlexLoader.loadBytes()
загружает PNG и JPG как MovieClip .Т.е. когда я смотрю в loader.content
о завершенном событии, я вижу MovieClip, а в loader.contentLoaderInfo.contentType
появляется «application / x-shockwave-flash».(Иногда это означает, что такое поведение воспроизводится на большинстве компьютеров и только после того, как размер файла .sol превышает 9 Мб.)
Кто-нибудь знает, как заставить FlexLoader
загружать надлежащий контент?
Есть способ избежать такого поведения, но он довольно уродлив.Loaded MovieClip
имеет внутри себя только один дочерний элемент - нужный Bitmap
, поэтому я могу проверить тип ресурса и извлечь рисунок:
public function getAsBitmap(imgName:String):Bitmap
{
var res:Object = getResource(imgName);
if (res is MovieClip)
{
try
{
return (res as MovieClip).getChildAt(0) as Bitmap;
}
catch(e:*) {}
}
return res as Bitmap;
}