mzd1e, всё во многом зависит от того что именно ты грузишь и в какой версии работаешь.
решение для версии ниже 8-ки: практически нет.
т.е. есть, но это решение с повторной загрузкой и надеждой на кэш.
короче, отстой полный.
рассмотри также возможность использования shared мувиклипов,
редко, но такое решение может помочь.
решение для 8ки и выше: есть, но тоже с ограничениями.
ты легко можешь загрузить картинку, тут же создать из нее битмап и
оставить жить этот битмап до следующего запроса.
у меня для этого написан класс, правда он не отшлифован, но юзать можно.
я приведу его ниже.
таким образом, ты можешь поступать только с картинками.
если речь идет об SWF с анимацией и/или кодом, то такое решение не подойдет.
классы для работы с картинками
(внимание, классу classes.lib.PicturesLibrary требуется залинкованный мувиклип
этот клип нужно поместить на сцену и задать ему класс classes.lib.PicturesLibrary
также в этом клипе должен быть рисунок, который покажется если загрузка не удалась):
Код:
/**
* @author Ivan Dembicki<br>
* http://www.dembicki.org<br>
* mailto: dembicki --at-- narod --dot-- ru<br>
* © 2006, Ivan Dembicki
*
* @version 1.1<br>
* January 0, 2006<br>
* please check updates: http://www.dembicki.org
*
**/
import flash.display.BitmapData;
import org.dembicki.PicturesLibraryInstance;
class org.dembicki.PicturesLibrary extends MovieClip {
static var _instance:PicturesLibrary;
private var pictures_mcl:MovieClipLoader;
private var unique_url_obj:Object;
private var error_bmp:BitmapData;
private function PicturesLibrary() {
this.error_bmp = new BitmapData(this._width, this._height, true, 0);
this.error_bmp.draw(this);
PicturesLibrary._instance = this;
this.pictures_mcl = new MovieClipLoader();
this.unique_url_obj = {};
pictures_mcl.addListener(this);
this._visible = false;
_global.ASSetPropFlags(this, ["pictures_mcl", "unique_url_obj", "error_bmp"], 7);
}
function getBitmap(url:String, listener_obj:Object):PicturesLibraryInstance {
if (!url.length) {
url = "link_undefined";
}
var name:String = url.split(".").join("_").split("/").join("_").split("\\").join("_");
var obj:PicturesLibraryInstance = unique_url_obj[name];
if (!obj) {
var obj:PicturesLibraryInstance = new PicturesLibraryInstance(url);
unique_url_obj[name]= obj;
obj.addListener(listener_obj);
this.preloadPicture(url, obj);
return obj;
}
obj.addListener(listener_obj);
if (!obj.loaded) {
return obj;
}
obj.broadcastMessage("onGetBitmap", obj.pict_bmp, obj.url);
obj._listeners = [];
return obj;
}
private function preloadPicture(url:String, obj:PicturesLibraryInstance) : Void {
var preload_mc:MovieClip = this.createEmptyMovieClip(obj.name, this.getNextHighestDepth());
this.pictures_mcl.loadClip(url, preload_mc);
}
private function onLoadProgress(target_mc:MovieClip, loaded:Number, total:Number) : Void {
var obj:PicturesLibraryInstance = unique_url_obj[target_mc._name];
obj.broadcastMessage("onLoadBitmapProgress", loaded, total);
}
private function onLoadError(target_mc:MovieClip) : Void {
var obj:PicturesLibraryInstance = unique_url_obj[target_mc._name];
obj.broadcastMessage("onGetBitmap", this.error_bmp);
delete unique_url_obj[target_mc._name];
}
private function onLoadInit(target_mc:MovieClip) : Void {
var obj:PicturesLibraryInstance = unique_url_obj[target_mc._name];
obj.pict_bmp = new BitmapData(target_mc._width, target_mc._height, true, 0);
obj.pict_bmp.draw(target_mc);
if (obj.pict_bmp) {
obj.loaded = true;
obj.broadcastMessage("onGetBitmap", obj.pict_bmp, obj.url);
obj._listeners = [];
}
target_mc.removeMovieClip();
}
}
Код:
/**
* @author © 2006 Ivan Dembicki, dembicki@narod.ru, http://www.dembicki.org
* @version 1.0
*/
import flash.display.BitmapData;
class org.dembicki.PicturesLibraryInstance {
public var pict_bmp:BitmapData;
public var url:String;
public var name:String;
public var loaded:Boolean;
public var _listeners:Array;
function PicturesLibraryInstance (url:String) {
AsBroadcaster.initialize(this);
this.url = url;
this.name = url.split(".").join("_").split("/").join("_").split("\\").join("_");
this.loaded = false;
}
// AsBroadcaster
function addListener(listenerObj:Object):Boolean {
return false;
};
function broadcastMessage(eventName:String):Void {
};
function removeListener(listenerObj:Object):Boolean {
return false;
};
}
использование:
Код:
import org.dembicki.PicturesLibrary
import flash.display.BitmapData;
PicturesLibrary._instance.getBitmap("any_url.png", this);
function onLoadBitmapProgress (loaded:Number, total:Number) {
// code here
}
function onGetBitmap (pict_bmp:BitmapData, url:String) {
if (url.length) {
// значит загрузилось
} else {
// не загрузилось
}
}
итак, командой getBitmap инициируем загрузку
методом onLoadBitmapProgress слышим процесс
методом onGetBitmap получаем битмап (даже если не загрузилось,
тогда получаем битмап изображения в мувике PicturesLibrary)
определяем загрузилось или нет по аргументу url.