0

プロジェクトにサムと完全な画像をロードする次のコードがあります。

private function processXMLHandle(e:Event):void
    {
        var xml:XML = new XML(e.target.data);

        for each (var line:XML in xml.IMAGE)
        {
            var file:String = line.@THUMB;              

            var loader:Loader = new Loader();
            loader.load(new URLRequest(file));

            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

            var fileFull:String = line.@FULL;

            var loaderFull:Loader = new Loader();
            loaderFull.load(new URLRequest(fileFull));
            loaderFull.contentLoaderInfo.addEventListener (Event.COMPLETE, completeFullHandler);

        }

        myXMLLoader.removeEventListener(Event.COMPLETE, processXMLHandle);
    }

そのために作成した配列をプッシュすると、画像はソートされていません。

私の友人は、「小さなファイルが最初に来る」のようなことが起こっていると私に言いました。彼は、問題はローダーにあると私に言いましたが、私を助けることはできません。

誰が何が悪いのか教えてもらえますか?

ありがとう!

4

2 に答える 2

1

これにアプローチする最善の方法は、コードをもう少し構造化することです。

最初に、サムネイルと完全なイメージの両方をロードするクラス (ImageLoader と呼びましょう) を作成します。これは、2 つの Loader インスタンスを持つクラスになります。項目ごとにこのクラスのインスタンスを作成し、開始する前にそれらを配列にプッシュします。

配列がいっぱいになったら、ImageLoader インスタンスに開始を指示する配列を繰り返します。このメソッドは、それぞれの Loader インスタンスの load メソッドを呼び出します。

両方のローダーが完了したら、完了したことを示すカスタム ImageLoaderComplete イベントを発行します。

より高いレベルでは、ImageLoader インスタンスの配列が含まれているのと同じクラスで、各 ImageLoader インスタンスから発行されたカスタム イベントをリッスンします。それらを数えます。配列内のアイテムと同じ数を数えたら、読み込みが完了し、配列は開始時と同じ順序のままで、親指と完全な画像が便利にグループ化されます。

于 2009-09-28T23:56:18.393 に答える
0

画像のリストを含む特定のXMLドキュメントをループしていて、ループ内で画像を非同期に読み込んでいるようです。そうすることで、明らかに小さい画像が最初に終了し、Event.COMPLETEイベントが発生します。これは、フラッシュにすべての画像の読み込みをすぐに同時に開始するように要求しているために発生します。

代わりに、最初に最初の画像をロードすることにより、ループで同期的に画像をロードすることもできます...その画像のEvent.COMPLETEが実行されたら、すべてが完了するまで次の画像をロードし続けます。これを行うと、アプリケーションはXMLで定義された順序で、キューのように一度に1つずつ画像をロードするように強制されます。

幸運を!

于 2009-09-28T23:37:02.847 に答える