Ho un numero arbitrario di immagini che voglio caricare. Voglio caricarli, attendere finché non ottengo Event.INIT per ciascuno, e solo dopo procedo con il resto del programma.
So che posso farlo avendo un aggiornamento listener di Event.INIT e controllo qualche variabile di conteggio, ma è questo l'approccio standard? C'è un modo più elegante o AS-specifico?
risposte:
1 per risposta № 1Il modo migliore è usare LoaderMax, sviluppato da greensock (lo sviluppatore di TweenMax).
http://www.greensock.com/loadermax/
È possibile creare un gruppo di caricamento e attendere l'evento completo per quel gruppo. Il codice è documentato molto bene.
Ecco un rapido mockup di codice per darti un'idea di cosa puoi aspettarti:
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 }));
}
Ti offre anche caricatori specializzati per immagini, video, suoni, ecc. Puoi usarli a tuo vantaggio o semplicemente trattarli in modo trasparente.
2 per risposta № 2
È possibile memorizzare tutti i caricatori in una matrice e rimuoverli quando inviano 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
}
Potresti anche usare una variabile count come tedire. Questo è ok, dal momento che un caricatore non ha inviato INIT due volte, ma dovrai rimuovere il caricatore dall'array o diminuire il contatore anche sugli eventi di errore.
0 per risposta № 3
Non esiste un "approccio standard". Devi implementarlo da solo con un contatore come ha detto @Kodiak.
Ma dai un'occhiata LoaderMax biblioteca se hai bisogno di qualcosa di più complesso. È possibile impostare il parametro "maxConnections" per determinare quanti oggetti viene caricato in una volta.