Actionscript 3 as3循环加载URL-完成后继续循环

Actionscript 3 as3循环加载URL-完成后继续循环,actionscript-3,flash,for-loop,Actionscript 3,Flash,For Loop,我正试图按顺序加载一堆文件。我希望另一个开始下载前一个已经下载。我认为最好的方法是通过一个for循环 URL=是数组中的一组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();

我正试图按顺序加载一堆文件。我希望另一个开始下载前一个已经下载。我认为最好的方法是通过一个for循环

URL=是数组中的一组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
    }

}

for(var i:int=0;i使用for循环并不能解决您想要做的事情

在我看来,最简单的方法应该是使用URL数组作为队列。这可以通过使用
array.shift()
来完成。但是如果完成后需要原始URL集,则应该制作数组的副本,因为
shift()
会对数组进行内联修改

解决方案可以是:

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

使用for循环并不能解决您想要做的事情

在我看来,最简单的方法应该是使用URL数组作为队列。这可以通过使用
array.shift()
来完成。但是如果完成后需要原始URL集,则应该制作数组的副本,因为
shift()
会对数组进行内联修改

解决方案可以是:

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

您应该使用像greensock LoaderMax这样的库。

这比创建自己的加载队列要困难得多。有很多bug、陷阱和特殊情况需要处理。它似乎工作得很好,有一天,一位客户因为防火墙后面这台计算机上这个特定flash版本的bug而给你回电话……我开始做我的库,但最后我使用了LoadManag呃。

您应该使用像greensock LoaderMax这样的库。

这比创建自己的加载队列要困难得多。有很多bug、陷阱和特殊情况需要处理。它似乎工作得很好,有一天,一位客户因为防火墙后面这台计算机上这个特定flash版本的bug而给你回电话……我开始做我的库,但最后我使用了LoadManag呃。

该死,你更快了:D,但你不是指
shift()
而不是
unshift()
?太棒了!我今天晚些时候会测试。现在没时间了。非常感谢!!该死,你更快了:D,但你不是指
shift()
而不是
unshift())
?太棒了!我今天晚些时候会测试它。现在没时间了。非常感谢!!它叫LoaderMax,不是LoaderManager(我更正了我的答案)。您可以在那里找到它。只需下载它,并在使用之前花一些时间学习它。这是值得的。我已经能够创建动态队列,以便顺利浏览20000张图片的库。它称为LoaderMax,而不是LoaderManager(我更正了我的答案)。你可以在那里找到它。只需下载它,并在使用它之前花一些时间学习它。这是值得的。我已经能够创建动态队列以顺利浏览20000张图片的图库。我需要一个lil帮助。它还没有开始工作,但我喜欢这个概念。你有时间吗?例如,你发布了.urlStream.load(urlReq);但在你的代码中urlReg不见了。我是否遗漏了什么?这段代码是否只会用逗号“concat”?我的数组由“|”-loadQueue(TheURL.concat())分隔;我没有给请求命名
urlReq
。在我的代码中,它只是被称为
request
。一般来说,我没有复制你的代码并对其进行更改,而是重新编写了它。;)数组:除非数组是以“|”作为分隔符的字符串,否则数组如何用“|”分隔?如果
URL
就是这样的字符串,那么使用
URL.split(“|”)来创建字符串数组。当
URL
已经是一个数组时,那么
URL.concat()
将以相同的顺序创建一个新数组,其中包含
URL
的相同元素。我需要一个小帮手。我还没有让它工作,但我喜欢这个概念。你有空吗?比如你贴的。加载(urlReq);但在你的代码中,urlReg不见了。我错过什么了吗?这段代码也将只使用逗号“concat”吗?我的数组由“|”-loadQueue(TheURL.concat())分隔;我没有为请求命名
urlReq
。在我的代码中,它被简单地称为
request
。一般来说,我没有复制您的代码并对其进行更改,而是重写了代码。;)数组:除非数组是以“|”作为分隔符的字符串,否则数组如何用“|”分隔?如果
URL
就是这样的字符串,那么使用
URL.split(“|”)来创建字符串数组。当
URL
已经是一个数组时,那么
URL.concat()
将以相同的顺序创建一个新数组,其中包含
URL
的相同元素。