Используя экранный объект Loader для загрузки X jpegs, измените размер каждого изображения по-разному, пока они находятся на сцене. - PullRequest
0 голосов
/ 06 декабря 2009

Привет, мне было интересно, можно ли это сделать

Я могу загрузить изображение и достаточно легко отобразить его с помощью addChild (myLoader); где myLoader находится в закрытой области видимости класса. Проблема в том, что всякий раз, когда я вызываю свою функцию внутри этого класса, который добавляет загрузчик на сцену, он очищает старый и помещает этот новый, даже если я добавляю немного, где я изменяю 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++;
    }
}

1 Ответ

0 голосов
/ 07 декабря 2009

Вы можете создать несколько загрузчиков для загрузки нескольких файлов:

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?
    }
}

Если вам нужен один загрузчик, вам нужно будет дождаться завершения каждой загрузки, извлечь данные растрового изображения из загруженного растрового изображения, добавить его в новое растровое изображение, а затем начать загрузку следующего изображения. Это немного больше боли - я бы придерживался такого подхода на вашем месте.

...