Flash AS3 - Как я могу узнать, когда все загрузчики, которые в данный момент загружаются, закончили. - PullRequest
2 голосов
/ 09 января 2012

У меня есть код, где я загружаю несколько сотен изображений в массив во Flash. Я использую XML для передачи в списке, а затем загрузчик для каждой записи, как это -

for (var i:int = 0; i < myXML.item.length(); i++) {
    imgloaders[i] = new Loader();
    imgloaders[i].load(new URLRequest(myXML.item[i].imageLocation));
    imgloaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
}

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

Наверное, должен быть лучший способ - кто-нибудь может помочь?

Спасибо за ваше время.

Ответы [ 3 ]

5 голосов
/ 09 января 2012

Я написал тривиальный класс для этого не так давно;Не стесняйтесь использовать его, если хотите.

// Joiner.as
package {
//Simple class to wait for several callbacks to finish before calling a single callback.
    public class Joiner {
        private var _count:int;
        private var _completed:int;
        private var _callback:Function;

    public function Joiner(count:int, callback:Function) {
        _count = count;
        _completed = 0;
        _callback = callback;
    }

    public function get count():int {
        return _count;
    }

    public function set count(v:int) {
        _count = v;
    }

    public function trigger() {
        _completed++;
        if( _completed >= _count ) {
            _callback();
        }
    }
}
}

(извините за грязный отступ).

Используется так:

var joiner:Joiner = new Joiner(myXML.item.length(), theFinalCallback);
for (var i:int = 0; i < myXML.item.length(); i++) {
    imgloaders[i] = new Loader();
    imgloaders[i].load(new URLRequest(myXML.item[i].imageLocation));
    imgloaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event) 
       imageLoaded(e);
       joiner.trigger();
    });
}
2 голосов
/ 09 января 2012

Не зная ничего о flash / action-script, я могу сказать, что ранее уже использовал этот шаблон:

onImageLoadedEvent
{
    count++;
    if (count == NUM_IMAGES)
    {
        doSomething();
    }
}

По сути, это то же самое, что вы предлагаете в вопросе, просто не нужнодля таймера, чтобы проверить счет.

0 голосов
/ 10 января 2012

Взгляните на LoaderMax от greensock, это действительно надежная библиотека для загрузки с множеством полезных методов для группировки и мониторинга нескольких объектов загрузчика http://www.greensock.com/loadermax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...