0

たくさんのファイルを順番に読み込もうとしています。前のダウンロードが完了したら、もう一方のダウンロードを開始してほしい。これを行う最良の方法は、forループを使用することだと思いました。

TheURL =は、配列内の一連のURLです。

for(var i:int=0;i<TheURL.length;i++)
{
    var urlString:String = TheURL[i];
    var urlReq:URLRequest = new URLRequest(urlString);
    var urlStream:URLStream = new URLStream();
    var fileData:ByteArray = new ByteArray();
    urlStream.addEventListener(Event.COMPLETE, loaded);
    urlStream.load(urlReq);

function loaded(event:Event):void
    {
        /// code to continue loop
    }

}

前の手順が完了するまで、他のユーザーがダウンロードを開始しないことが重要です。それを行う方法について何か提案はありますか?ありがとう

4

3 に答える 3

4
function downloadFiles():void
{
    downloadNextFile();
}

function downloadNextFile():void
{
    var urlString:String = TheURL.shift();
    var urlReq:URLRequest = new URLRequest(urlString);
    var urlStream:URLStream = new URLStream();
    var fileData:ByteArray = new ByteArray();
    urlStream.addEventListener(Event.COMPLETE, loaded);
    urlStream.load(urlReq);
}

function loaded(event:Event):void
{
     downloadNextFile();
}
于 2012-09-02T18:24:18.737 に答える
2

forループを使用しても、やりたいことが解決されません。

私の意見では、最も簡単な方法は、URL の配列をキューとして使用することです。これは、 を使用して実行できますArray.shift()shift()ただし、配列のインライン変更を行うため、完了時に元の URL セットが必要な場合は、配列のコピーを作成する必要があります。

解決策は次のとおりです。

function loadQueue(urlQueue:Array):void
{
    var url:String = urlQueue.shift();
    var request:URLRequest = new URLRequest(url);
    var stream:URLStream = new URLStream();
    var data:ByteArray = new ByteArray();

    var completeHandler:Function = function(event:Event)
    {
        // remove listener from stream to be a clean coder ;)
        stream.removeEventListener(Event.COMPLETE, completeHandler);

        // handle completion in the way you need ...

        // continue with the next element
        if (urlQueue.length > 0)
           loadQueue(urls);
    }

    urlStream.addEventListener(Event.COMPLETE, loaded);
    urlStream.load(urlReq);
}

キューをロードすると、次のようになります。

loadQueue(TheURL.concat()); // concat() will clone your array
于 2012-09-02T18:28:36.730 に答える
0

greensockLoaderMaxhttp://www.greensock.com/loadermax/のようなライブラリを使用する必要があります
独自の読み込みキューを作成するよりもはるかに困難です。対処すべきバグ、トラップ、特殊なケースがたくさんあります。正常に動作しているようです。ある日、このファイアウォールの背後にあるこのコンピューターのこの特定のフラッシュバージョンのバグが原因で、お客様から折り返し電話がありました。ライブラリの作成を開始しましたが、最終的にLoadManagerを使用しました。

于 2012-09-02T18:39:03.527 に答える