1

URLLoader によって起動された Event.COMPLETE から関連付けられた URLRequest を取得する方法に関する質問のフォローアップとして、ループ内のローダー オブジェクトに対して関数を機能させるにはどうすればよいですか?

これが私の既存の(大まかな)コードです。私は常に配列の最後の要素から mylabel を取得します。

var _loader = new Loader(); 
for (j = 0; j < 5; j++) {
    //mylabel variable is correct setup in the loop
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
        doneLoad(e, mylabel);
    });

    _loader.load(new URLRequest(encodeURI(recAC[j].url)));

}//for loop
4

2 に答える 2

1

上記のコメントによると、これは次の理由で機能しません。

1) 同じイベントリスナーをローダーに 5 回追加するだけです。2) 同じローダー オブジェクトを 5 回リセットしています。

最終的な出力は、前回呼び出したときとまったく同じになります。

これに対処するにはさまざまな方法があります - 非同期的に何かをロードすることは、コーディングを学ぶ上で非常に面倒なことの 1 つです - しかし、最も簡単な方法は、おそらく 5 つの別個のローダーを作成することです。

私はこのようなことをします:

var loaders:Array = [];
var labels:Array = ["label1", "label2", "label3", "label4", "label5"];
for (var j:int = 0; j < 5; j++) {
loaders[j] = new Loader();
loaders[j].contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loaders[j].load(new URLRequest(encodeURI(recAC[j].url)));
}

function completeHandler(e:Event):void {
doneLoad(e.currentTarget, labels[loaders.indexOf(e.currentTarget)]);
}

ややこしいのは、どのロードがどのラベルに関連付けられているかなどを追跡する良い方法を見つけることです。理論上、ロードは任意の順序で終了できるためです。そのため、そこに個別のラベル配列を用意し、目的のラベルとロードが完了したばかりのローダーを一致させるだけです。

それが役立つことを願っています!

于 2010-05-05T21:09:30.803 に答える
0

belove という行は機能するはずですが、常に -1 を返します。loaders.indexOf(e.currentTarget);

ここに私のコード

for(i; i < total; i++){ imgLoaderArray[i] = new Loader(); imgLoaderArray[i].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, urlError);
imgLoaderArray[i].contentLoaderInfo.addEventListener(Event.COMPLETE, ロード済み); imgLoaderArray[i].load(新しい URLRequest(xmlList[i].image)); }

function loaded(e:Event):void{ trace("index: "+imgLoaderArray.indexOf(e.currentTarget)); // 毎回 -1 を返す }

于 2011-01-26T09:14:17.097 に答える