AS3:从XML列表中加载加载顺序

时间:2014-08-15 14:58:09

标签: xml actionscript-3 loader

所以我试图像以前那样多次加载一组缩略图,但是这次他们出现的顺序完全搞砸了,我无法找到原因!

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

而不是增加顺序......什么可能是错的?非常感谢。

2 个答案:

答案 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
    }
}