2012-03-15 6 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関数を実装してBitmapを返すことができますか?

ありがとうございました!このような

+0

などなど(ロードされたビットマップを返す、または1つの負荷に複数のリスナーを持ついずれか)それを拡張することができます。データがロードされたときに完全なイベントハンドラが必要になります。 –

+0

短くはありませんが、いくつかの選択肢があります。代わりに 'Loader'オブジェクトを単に返すこともできます。ただし、ステージに追加しても、ロードされているイメージがまだロードされていない可能性があります。 – Taurayi

答えて

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()は、非同期です。これは、辞書にキーとしてローダーを格納し、呼び出すコールバックとしての値を持つ単純なクラスです。

それは同じビットマップを複数の負荷にも対応するように、さらにLoaderは非同期関数である

関連する問題