Mam dowolną liczbę obrazów, które chcę załadować. Chcę je załadować, poczekać, aż dla każdego otrzymam INICJONUJĄCY Event, a dopiero potem przejść do reszty programu.
Wiem, że mogę to zrobić przez aktualizację nasłuchiwania Event.INIT i sprawdzenie zmiennej licznika, ale czy jest to podejście standardowe? Czy istnieje bardziej elegancki lub specyficzny dla AS sposób?
Odpowiedzi:
1 dla odpowiedzi № 1Najlepszym sposobem jest użycie LoaderMax, opracowanego przez greensock (twórcę TweenMax).
http://www.greensock.com/loadermax/
Możesz utworzyć grupę ładowania i czekać na kompletne wydarzenie dla tej grupy. Kod jest udokumentowany bardzo dobrze.
Oto szybka makieta kodu, która daje wyobrażenie o tym, czego możesz oczekiwać:
mediaLoader = new LoaderMax( { name:"mediaLoader" } );
mediaLoader.addEventListener(LoaderEvent.PROGRESS, onMediaLoadProgress);
mediaLoader.addEventListener(LoaderEvent.COMPLETE, onMediaLoadComplete);
mediaLoader.addEventListener(LoaderEvent.ERROR, onMediaLoadError);
for (var i:int = 0; i < 10; i++)
{
mediaLoader.append(LoaderMax.parse("image_" + i + ".jpg", { estimatedBytes: 100000 }));
}
Daje także specjalistyczne ładowarki do zdjęć, wideo, dźwięku itp. Możesz ich używać na swoją korzyść lub po prostu traktować je w sposób przejrzysty.
2 dla odpowiedzi nr 2
Możesz zapisać każdy program ładujący w tablicy i usunąć go, gdy wywołają INIT
private function onInit(e:Event):void
{
var loader:Loader = (e.currentTarget as LoaderInfo).loader;
_loaders.splice(_loaders.indexOf(loader), 1);
if (_loaders.length == 0)
//do something
}
Możesz także użyć zmiennej licznika, jak tymówić. Jest to w porządku, ponieważ program ładujący dwukrotnie nie wywoła INIT. Ale będziesz musiał usunąć program ładujący z tablicy lub zmniejszyć licznik w zdarzeniach błędu.
0 dla odpowiedzi № 3
Nie ma „standardowego podejścia”. Musisz je zaimplementować samodzielnie, używając licznika, jak powiedział @Kodiak.
Ale spójrz na LoaderMax biblioteka, jeśli potrzebujesz czegoś bardziej złożonego. Można ustawić parametr „maxConnections”, aby określić, ile elementów ładuje się jednocześnie.