2009-09-28 10 views
0

Je le code qui charge les pouces et les images complètes dans mon projet:AS3 - XML ​​IMG chargement Unordered

private function processXMLHandle(e:Event):void 
    { 
     var xml:XML = new XML(e.target.data); 

     for each (var line:XML in xml.IMAGE) 
     { 
      var file:String = [email protected];    

      var loader:Loader = new Loader(); 
      loader.load(new URLRequest(file)); 

      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 

      var fileFull:String = [email protected]; 

      var loaderFull:Loader = new Loader(); 
      loaderFull.load(new URLRequest(fileFull)); 
      loaderFull.contentLoaderInfo.addEventListener (Event.COMPLETE, completeFullHandler); 

     } 

     myXMLLoader.removeEventListener(Event.COMPLETE, processXMLHandle); 
    } 

Quand je pousse le tableau I'v créé pour cela, les images vient dans un ordre non triés.

Un de mes amis m'a dit que ça se passait quelque chose comme ça: "les petits fichiers arrivent en premier". Il m'a dit que le problème venait du chargeur, mais il ne pouvait pas m'aider.

Quelqu'un peut-il me dire ce qui ne va pas?

Merci!

Répondre

0

Il semble que vous parcouriez un document XML donné contenant une liste d'images et chargeant les images de manière asynchrone dans une boucle. En faisant cela, évidemment les plus petites images vont finir en provoquant l'événement Event.COMPLETE. Cela arrive parce que vous demandez à Flash de commencer à charger toutes les images immédiatement et simultanément. Ce que vous voudrez peut-être faire est de charger les images de manière synchrone dans une boucle en chargeant d'abord la première image ... quand les images Event.COMPLETE s'exécuteront, continueront à charger l'image suivante et ainsi de suite jusqu'à ce qu'elles soient toutes terminé. Cela va forcer votre application à charger les images dans l'ordre défini dans le XML et un à la fois comme une file d'attente.

Bonne chance!

+0

Ralph, merci pour cette réponse .. mais ... avez-vous un exemple sur comment puis-je faire cela? –

1

La meilleure façon d'aborder cela est d'avoir un peu plus de structure dans votre code. Commencez par créer une classe (appelons-la ImageLoader) chargée de charger à la fois le pouce et l'image entière. Ce serait une classe avec 2 instances Loader. Créez une instance de cette classe pour chaque élément et placez-les dans un tableau avant de commencer.

Une fois que le tableau est saturé, parcourez le tableau en demandant aux instances de ImageLoader de démarrer. Cette méthode appelle à son tour la méthode de chargement de chacune de ses instances Loader.

Une fois que les deux chargeurs ont terminé, emit a custom ImageLoaderComplete event indiquant que c'est terminé. À un niveau supérieur, dans la même classe que celle du tableau d'instances ImageLoader, écoutez l'événement personnalisé émis par chacune des instances d'ImageLoader. Comptez-les. Lorsque vous avez compté autant d'éléments que le tableau, le chargement est terminé et votre tableau reste dans la même séquence que lorsque vous avez démarré, le pouce et l'image complète étant regroupés.

+0

Spender, merci pour l'explication. Cela a vraiment du sens pour moi, mais je ne suis pas capable d'exécuter cela. J'apprends un script d'action et c'est trop complexe pour moi maintenant. –