所以我试图像以前那样多次加载一组缩略图,但是这次他们出现的顺序完全搞砸了,我无法找到原因!
function thumbsLoader(): void {
for (var i: uint = 0; i < VideosTotal; i++) {
thumbURL = VideoList[i].@THUMB_URL;
thumbLoader = new Loader();
thumbLoader.load(new URLRequest(thumbURL));
thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, viewThumbs);
thumbLoader.name = i.toString();
}
}
function viewThumbs(e: Event): void {
thumb = e.target.loader;
trace(thumb.name);
}
跟踪功能输出: 13 11 6 20 18 4 14 16 7 17 2 1 15 9 0 8 22 3 12 10 五 19 21
而不是增加顺序......什么可能是错的?非常感谢。
答案 0 :(得分:0)
使用Loader加载文件正在执行异步。通常,它不是问题,也不需要修复它。但是如果你必须有严格的加载顺序,你可以建立一个装载链。它可能看起来像这样:
private var thumbIndex:uint = 0;
private function loadImage(index:uint):void
{
thumbURL = VideoList[index].@THUMB_URL;
thumbLoader = new Loader();
thumbLoader.load(new URLRequest(thumbURL));
thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, viewThumbs);
thumbLoader.name = i.toString();
}
private function viewThumbs(e:Event):void
{
thumb = e.target.loader;
trace(thumb.name);
if (thumbIndex < VideoList.length()) {
thumbIndex++;
loadImage(thumbIndex);
}
}
此代码可以同步加载。
另一种方法:在加载时加载图像并在加载后进行排序。
您可以将加载的拇指添加到数组中,如
array.push({id: thumb.name, thumb: thumb.content});
当您加载所有图像时,您需要致电
array.sortOn("id");
你将对图像进行排序。然后你可以将它们添加到舞台上。 但是在这个解决方案中,无论如何都需要一些计数器来检测加载何时结束。
答案 1 :(得分:0)
这仍然会尝试一次加载它们,但是按顺序将它们存储在一个数组中。加载完所有图像后,您可以对它们执行某些操作。
function thumbsLoader(): void {
videosPending = VideosTotal;
for (var i: uint = 0; i < VideosTotal; i++) {
thumbURL = VideoList[i].@THUMB_URL;
thumbLoader = new Loader();
thumbLoader.load(new URLRequest(thumbURL));
thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, viewThumbs);
thumbLoader.name = i.toString();
}
}
var videosPending = 0;
var videosBack = [];
function viewThumbs(e: Event): void {
videosBack[Number(e.target.loader.name)] = e.target.loader;
videosPending--;
if (videosPending == 0){
// Now lay them out using the videosBack array
}
}