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