0

同じファイルの複数の SWF を読み込んでいる例:

      var movies:Array = new Array ("Symbols/00.swf","Symbols/00.swf","Symbols/00.swf");

私の読み込み方法は、以下を使用して正常に機能します。

var perc:int = (event.bytesLoaded / event.bytesTotal) * 100;
Loading.text = "loading " +perc + "%";

私が抱えている問題は、iv が Movies:Array から 1 つのアイテムをダウンロードした後、読み込みテキストが %100 になっていることです。

これは、残りのファイルが既にキャッチされているために発生します。

問題は 、このローディング テキストを遅くして、すべてのアイテムの準備ができているかどうかを判断するにはどうすればよいかということです。

4

1 に答える 1

1

まず、なぜ 1 つの SWF を複数回ロードするのでしょうか? 次のトリックを使用できます:読み込まれた SWF の複数のインスタンスを表示する方法。次に、Loader オブジェクトを使用して一度に 1 つの SWF を読み込みます。その進行状況は、その 1 つの SWF に関連付けられます。そのため、必要に応じてより多くの SWF をインスタンス化するために、最初にすべての固有の SWF をロードし、それらの Loader 参照をどこかに保存します。次に、progress イベント リスナーから合計パーセンテージを収集します。後者は、すべてのローダーに対して 1 つの進行状況イベント リスナーを使用する可能性が高いため、少し複雑です。たとえば、次のようなことができます。

public static var ALL_LOADERS:Object;
public static var PROGRESS_DATA:Object; // we need associative arrays here
public static var BYTES_LOADED:int=0;
public static var TOTAL_BYTES:int=0;

public static function RegisterLoader(path:String,loader:Loader):void {
    if (!ALL_LOADERS) ALL_LOADERS=new Object();
    if (!PROGRESS_DATA) PROGRESS_DATA=new Object();
    ALL_LOADERS[path]=loader;
    PROGRESS_DATA[loader]=new Object();
    PROGRESS_DATA[loader].bytesLoaded=0;
    PROGRESS_DATA[loader].bytesTotal=-1;
}

// now a listener
public static function progressListener(e:Event):void {
    var l:Loader=e.target as Loader;
    if (!l) return; // that wasn't a loader that sent the event. Uh oh
    var plo:Object=PROGRESS_DATA[l];
    if (!plo) return; // unregistered loader. Ignore
    if (plo.bytesTotal<0) {
        plo.bytesTotal=e.bytesTotal;
        TOTAL_BYTES+=e.bytesTotal;
    }
    var pbl:int=plo.bytesLoaded;
    plo.bytesLoaded=e.bytesLoaded;
    LOADED_BYTES+=(e.bytesLoaded-pbl);
    var perc:int = (LOADED_BYTES / TOTAL_BYTES) * 100;
    Loading.text = "loading " +perc + "%";
}

ロード プロセスは 1 回だけ実行されるように設計されているため、すべての初期化が 1 回行われます。このコードにはエラー処理がありませんが、自分で記述できます。

于 2012-09-21T04:47:14.443 に答える