我从URLRequest加载Bitmap时遇到了一个基本问题 问题是,加载一个Bitmap是为了在每次我想加载一个Image时编写它的代码。所以我想到了一些功能:
var bitmap1:Bitmap = bitmapForURL("test1.gif");
var bitmap2:Bitmap = bitmapForURL("test2.gif");
function bitmapForURL(url:String):Bitmap
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
var request:URLRequest = new URLRequest(url);
loader.x = size * numChildren;
loader.load(request);
return Bitmap(loader);
}
不幸的是,在函数结束时,Bitmap尚未创建。 - >不工作
然后我读了一下Event.Complete-Listener,但在这种情况下,我将引用遗漏回我的bitmap1和bitmap2。
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ioCompleteHandler);
我的问题是:我如何实现一个imageLoader函数,它能让我返回一个位图?
感谢您的帮助!
答案 0 :(得分:0)
这样的事情应该有效:
public class BitmapLoader
{
private var m_loaders:Dictionary = new Dictionary( true );
public function loadImage( url:String, callback:Function ):void
{
// create our request and loader
var request:URLRequest = new URLRequest( url );
var loader:Loader = new Loader;
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, this._onComplete );
// add the callback to our dictionary
this.m_loaders[loader] = callback;
// load it
loader.load( request );
}
private function _onComplete( e:Event ):void
{
// get our loader
var loaderInfo:LoaderInfo = ( e.target as LoaderInfo );
var loader:Loader = loaderInfo.loader;
// remove the event listener
loaderInfo.removeEventListener( Event.COMPLETE, this._onComplete );
// call our function
if( loader in this.m_loaders )
{
// call our callback
this.m_loaders[loader]( loaderInfo.content as Bitmap );
// remove the loader from the dictionary
this.m_loaders[loader] = null;
delete this.m_loaders[loader];
}
else
trace( "We don't have a callback for the loader" );
}
}
如前所述,Loader.load()
是异步的,因此您必须使用回调(或事件或信号)。这是一个简单的类,它将加载器存储为Dictionary中的键,其值为我们要调用的回调。
你可以进一步扩展它,以便它可以处理同一个位图的多个加载(返回加载的Bitmap,或者有多个监听器加载一个)等等