0

嘿那里,我想知道这是否可以做到

我可以使用 addChild(myLoader); 加载图像并轻松显示它。其中 myLoader 在 classWide 私有范围内。问题是,每当我在将加载程序添加到舞台的类中调用我的函数时,它都会清除旧的并放入新的,即使我添加了一些我将 myLoader.name 更改为与多少图像相关的东西它已经完成了。这是一个严重的障碍,因为除了知道我需要加载多少图像并编写代码 X 次之外,我无能为力。问题是 URL 是从 XML 文件中读取的。

我的主要愿望是拥有一个包含我的加载器的 classWide 私有数组,每次加载完成时我都会使用 myArray.push(myLoader) 分配它们。有一个问题是它可以编译但它们永远不会显示

它会像写的那样工作

public class Images extends Sprite
{
    private var imagesLoaded = 0;
    private var myLoader:Loader;

    ...

    public function Images():Void
    {
        myLoader = new Loader;
        //loop calling a myLoader.load(imageURL) for a bunch of urls
        myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    }

    public function imageLoaded
    {
        myArray[imagesLoaded] = myLoader;
        trace("does\'nt get to here!!");
        addChild(myArray[imagesLoaded]);
        imagesLoaded++;
    }
}
4

1 回答 1

0

您可以创建多个加载器来加载您的多个文件:

public class Images extends Sprite
{
    private var imagesLoaded = 0;
    private var myArray:Array;

    ...

    public function Images():Void
    {
        myArray = [];

        for each (var url:String in myBunchOfURLS)
            loadURL(url);
    }

    private function loadURL(url:String):void
    {
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
        loader.load(new URLRequest(url));

        // you'll need to add the loader to the display list to see anything!
        addChild(loader);
    }

    private function imageLoaded(event:Event):void
    {
        var info:LoaderInfo = LoaderInfo(event.currentTarget);
        info.removeEventListener(Event.COMPLETE, imageLoaded);

        var loader:Loader = info.loader;
        myArray[imagesLoaded++] = loader;

        // or you could add the loader to the display list here instead?
    }
}

如果您必须有一个加载器,那么您需要等待每次加载完成,从加载的位图中获取位图数据,将其添加到新位图中,然后开始加载下一个图像。这有点痛苦——如果我是你,我会坚持这种方法。

于 2009-12-07T16:09:14.837 回答