1

AS3 では画像が非同期的に読み込まれること、およびその同期はイベントとイベント リスナーを使用して処理する必要があることを理解しています。

したがって、単純なケースでは、次のようになります。

var loader : Loader = new Loader();
var im_file: URLRequest = new URLRequest ("imfile.png");
loader.load(im_file);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loading_complete);

function loading_complete (e : Event) : void
{ // ... do smt with your loaded data // }

私がやりたいことは、事前に必要なすべての画像をロードする PreLoader クラスを用意することです。その場合、ロードが完了したことを他のすべてのクラスに知らせるにはどうすればよいでしょうか?

イベントをディスパッチしますか? この場合のベストプラクティスは何ですか?

前もって感謝します、

プラスカトン

4

2 に答える 2

1

ほとんどの場合、キューを作成し、イメージ パスをキューに追加します。次に、各画像の読み込みが完了すると、キュー内の次の項目に進みます。すべての画像が読み込まれたら、COMPLETE イベントなどをディスパッチして、アプリにすべての処理が完了したことを知らせます。

単一または一括のイメージ読み込みを実装する方法については、QueueLoaderまたはCasalibを確認してください。

于 2013-01-20T20:50:11.263 に答える
0

@Boon が提供した回答に加えて、これがイメージ キューの実際の設定方法です。

まず、ロードする必要があるすべての画像を格納するリストが必要です。これにより、必要な数のイメージを簡単に定義できます。「キュー」にすることができます。

var queue:Array = [
    "http://interfacelift.com/wallpaper/previews/03177_orionnebulaintheinfrared@2x.jpg",
    "http://interfacelift.com/wallpaper/previews/03175_purpleclouds@2x.jpg",
    "http://interfacelift.com/wallpaper/previews/03173_goodmorning2013@2x.jpg"
];

次に行うことは、私たちが行っていることの「コア」メソッドと呼ぶものをセットアップすることです。次の画像の読み込みを処理し、キューが空になったときに通知します。次のようになります。

function loadNext():void
{
    if(queue.length > 0)
    {
        // Notice here that we use .pop() on the queue, which will select and
        // remove the last item from queue.
        var req:URLRequest = new URLRequest( queue.pop() );
        var photo:Loader = new Loader();

        photo.load(req);
        photo.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
    }
    else
    {
        // The queue is finished - dispatch an event or whatever you fancy to
        // let the rest of the application know we're done here.
        trace("Queue finished.");
    }
}

そしてもちろん、ロードされた画像の完成を処理するリスナー関数です。ここで呼び出していることに注意してください。loadNext()これは、現在ロード中のイメージが終了したときにのみ、キュー内の次のイメージのロードを開始するための鍵です。

function loadComplete(e:Event):void
{
    addChild(e.target.content as Bitmap);


    // Begin loading next image in the queue.
    loadNext();
}

プロセスを開始するには、もちろんこれを使用します。これは、キューが空の場合はキューが終了したことをすぐに通知するか、画像を順番にロードし始めます。

// Start loading the queue.
loadNext();

追加/片付け:

このコードを再利用したり、整理したりしたい場合は、これを簡単にクラスにすることができます。クラスを呼び出すことができImageQueue、その構造には上記のqueue配列、loadNext()メソッド、およびloadComplete()メソッドが含まれます。add()また、きれいな方法で最初にキューに画像を追加する方法も持つことができます。

これがそのクラスの基礎です。興味があれば完成させることができます。

public class ImageQueue
{

    private var _queue:Array = [];

    public function add(image:String):void{ }
    public function loadNext():void{ }

    private function _loadComplete(e:Event):void{ }

}
于 2013-01-20T22:50:42.853 に答える