2012-03-15 71 views
0

我从加载URLRequest中的位图时遇到了一个基本问题。
问题是,加载一个位图是每次我想要加载图像时写很多代码。所以我想到了一些功能:加载多个具有相同功能的位图

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); 
} 

不幸的位图是不是已经创建的函数结束。 - >不工作
然后我读了关于Event.Complete-Listener,但在这种情况下,我把参考放回到我的bitmap1和bitmap2。

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ioCompleteHandler); 

我的问题是:我如何实现一个imageLoader函数,让我回来一个位图?

感谢您的帮助!

+0

装载机是一个异步函数科佩斯可以进一步扩展。数据加载完成后,您将需要一个完整的事件处理程序。 – 2012-03-15 17:20:59

+0

总之没有,但有一些替代品。您可以简单地返回一个'Loader'对象,但是即使将它添加到舞台上,正在加载的图像可能尚未加载。 – Taurayi 2012-03-15 17:24:58

回答

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()是异步的,所以你必须有回调的工作(或活动,或信号)。这是一个简单的类,它将加载器作为字典中的键存储,并将值作为我们要调用的回调函数。

,使其与多个负载到相同的位图(或者返回加载位图,或者具有多个听众一个负载)等等等等

相关问题