2


Adobe Flash Professional CS5 を使用して Web サイトを作成しています。
for ループ内で URLLoader.load(path) を使用してテキスト ファイルの内容を読み込もうとしています。
パスは反復ごとに変更されます。
イベント ハンドラー メソッドからデータをトレースすると、最後のパスのテキスト ファイルのコンテンツのみが返されます。
for がループした後でのみ、イベント ハンドラー メソッドを呼び出しているようです。

コード:

var myData:URLLoader = new URLLoader();

myData.addEventListener(Event.COMPLETE, onLoaded);

function onLoaded(e:Event):void
{
trace(myData.data);
}

for (var o = 0; o < filesArray.length; o++)
{
    for (var p = 0; p < filesArray[o].length; p++)
    {
        if (filesArray[o][p] == "category.txt")
        {
            path = "C:\\inetpub\\wwwroot\\" + filesArray[o][0] + "\\" + filesArray[o][p];
            myData.load(new URLRequest(path));
            trace(path);
        }
    }
}

これは出力です:

C:\inetpub\wwwroot\0001\category.txt
C:\inetpub\wwwroot\0002\category.txt
C:\inetpub\wwwroot\0003\category.txt
C:\inetpub\wwwroot\0004\category.txt
C: \inetpub\wwwroot\0005\category.txt
ジュエリー

おっしゃる通り、「ジュエリー」は「C:\inetpub\wwwroot\0005\category.txt」の中身です。

「onLoaded」メソッドを次のような文字列を返すように変更しようとしました:

function onLoaded(e:Event):String
{
    return myData.data.toString();
}

それは for ループの中にあります:

trace(myData.load(new URLRequest(path)));

次に、これを出力として取得しました。

undefined
C:\inetpub\wwwroot\0001\category.txt
undefined
C:\inetpub\wwwroot\0002\category.txt
undefined
C:\inetpub\wwwroot\0003\category.txt
undefined
C:\inetpub\wwwroot\0004\category .txt
未定義
C:\inetpub\wwwroot\0005\category.txt

また、for ループを while ループに変換しようとしましたが、同じ結果でした。
なぜそのように振る舞うのですか?
URLLoader.load メソッドが for ループ内でうまく機能せず、それについて何もできない場合、FileStream などのファイルから単純なテキストを読み取る別の方法はありますか? (私は ActionScript を初めて使用し、C# から来ました)

前もってありがとう、
フレディ。

4

2 に答える 2

1

このチュートリアルとサンプルコードでは、複数のファイルへのプリロードについて説明していますhttp://manewc.com/2008/09/02/preloading-multiple-image-demo/

コードの問題は、すべてのファイルに対してURLLoaderが1つしかないことである可能性があります。ファイルごとに新しいロードオブジェクトを作成する必要があります。

于 2011-04-23T12:24:55.220 に答える
1

テキストファイルをロードするのに十分な時間をローダーに与えていません。お使いのコンピュータはネットワーク速度よりもはるかに高速であるため、おそらくローダーが最初のファイルのロードを開始する前であっても、次のファイルよりも 2 番目のファイルを強制的にロードする必要があります。そして、ロードする時間があるのは最後の 1 つだけです。

次のロードを開始する前に、それぞれのロードが実際に完了するまで待つ必要があります。これはループでは機能しません。名前を配列に入れてからインデックスを設定し、最初の要素に初期化して読み込みを開始し、onLoaded イベントでファイルを取得し、インデックスをインクリメントして次の読み込みに進む必要があります。終了するまでテキスト ファイル。

はい、すべてのファイルに対して 1 つのローダーしか使用できません。複数のローダーを使用したソリューションも機能しますが、複数のローダーを使用するだけではなく、それぞれが他のローダーに干渉しないためです。

于 2011-04-23T12:49:03.957 に答える