AS3 : charger plusieurs images à partir d'une boucle

AS3 : charger plusieurs images à partir d'une boucle - Flash/ActionScript - Programmation

Marsh Posté le 07-01-2009 à 10:25:37    

Bonjour à tous,
 
Cela fait un moment que je n'ai pas posté un message ici, pour commencer je vous souhaite une très bonne année 2009.
 
J'ai donc une question AS3, je maitrise pas encore mais ça commence à venir...
 
J'ai une série d'images (des pictos) dont les chemins proviennent d'un fichier XML.
 
Je lance une boucle pour tenter de les charger mais je n'ai toujours que la derniere image qui s'affiche... pouvez-vous m'aider à corriger mon erreur ?
 
une bout de code :
 

Code :
  1. var xml_pictos=markers[number-1][9];
  2.         var n=0;
  3.         if(MCTile.MCPictos.numChildren>0)
  4.           {
  5.            MCTile.MCPictos.removeChildAt(0);
  6.           }
  7.         for each(var ThePicto:XML in xml_pictos..picto){
  8.         var pic = new Loader();
  9.         pic.contentLoaderInfo.addEventListener(
  10.         Event.COMPLETE,
  11.          function(event:Event):void {
  12.           this['MCPicto'+n]=new MovieClip();
  13.           this['MCPicto'+n].addChild(pic);
  14.           var pos:int=n*25;
  15.           this['MCPicto'+n].x=pos;
  16.           trace("chargé : "+ThePicto+" position : "+pos+" num : "+MCTile.MCPictos.numChildren)
  17.           //pic.x=pos
  18.           MCTile.MCPictos.addChild(this['MCPicto'+n]);
  19.           n++;
  20.          });
  21.         pic.load(new URLRequest(path+ThePicto));
  22.         }


 
 
En fait j'ai l'impression qu'il y a à chaque instance de ma boucle un remplacement de l'instance précédente, car on aperçoit de façon très rapide les pictos s'afficher les uns après les autres mais s'effacent à chaque fois qu'un nouveau picto s'affiche, donc il ne reste que le dernier à l'écran.
 
Merci d'avance

Reply

Marsh Posté le 07-01-2009 à 10:25:37   

Reply

Marsh Posté le 07-01-2009 à 14:52:38    

bon... finalement j'ai trouvé un truc qui semble marcher... mais ça me parait bizarre de ne pas pouvoir bouger mes objets une fois le chargement terminé (dans le Event.COMPLETE)
 
voici mon code :
 

Code :
  1. var xml_pictos=markers[number-1][9];
  2.         var i:int = MCTile.MCPictos.numChildren;
  3.         while( i>0)
  4.         {
  5.          MCTile.MCPictos.removeChildAt(i-1);
  6.          i = MCTile.MCPictos.numChildren;
  7.          trace(MCTile.MCPictos.numChildren);
  8.         }
  9.         var TabPictos:Array=new Array();
  10.         for each(var ThePicto:XML in xml_pictos..picto){
  11.         TabPictos.push(ThePicto);
  12.         }
  13.         for (var n:Number = 0; n < TabPictos.length; n++) {
  14.          try {
  15.          ThePicto=TabPictos[n];
  16.          TabLoaders[n] = new Loader();
  17.          TabLoaders[n].load(new URLRequest(path+ThePicto));
  18.          TabPictos[n]=new Sprite();
  19.          TabPictos[n].addChild(TabLoaders[n]);
  20.          TabPictos[n].x=n*25;
  21.          MCTile.MCPictos.addChild(TabPictos[n]);
  22.          }
  23.          catch(e:Error){
  24.            trace(e);
  25.          }
  26.          finally{
  27.          TabLoaders[n].contentLoaderInfo.addEventListener(
  28.          Event.COMPLETE,
  29.           function(evt:Event):void {
  30.           });
  31.          }
  32.         }

Reply

Marsh Posté le 09-01-2009 à 04:52:00    

# addEventListener(
#         Event.COMPLETE,
#          function(event:Event):void {
 
:ouch:
 
On peut pas faire plus illisible !
AS3 c'est des classes, des classes et encore des classes.
 
Quand tu as besoin d'une fonction tu crees une methode sur ton object.
Elle doit avoir un nom, une place, une raison d'etre, des parametres, etc ...
 
Bref, il te faut une classe qui gere tout tes pictos.
Dedans tu commences par charger ton XML que tu stocks dans une proprieté.
Quand c'est fini, tu lances ta methode qui va charger et afficher chaque picto en leurs attribuant les proprietes que tu veux.
 
Pour que ce soit encore plus carré tu peux meme mettre des ecouteurs pour chaque etape pour bien controler la progression.
Encore que AS3 implemente foule d'ecouteurs donc, normalement pas besoin.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 09-01-2009 à 09:54:46    

ouai j'admets ne pas avoir optimisé ça coté "object" mais à vrai dire, si j'avais pu me passer de faire ça en AS3, je l'aurai fait en AS2 ! mais en fait il s'agit d'une application utilisant l'API googleMap... qui est en AS3 !
 
Je maitrise pas la programmation objet, chaque fois que j'ai essayé, ça n'a pas été très concluant !

Reply

Marsh Posté le 09-01-2009 à 10:37:16    

Ben la, t'as pas vraiment le choix.
C'est dur de s'y mettre mais si tu lis de la doc ou l'aide, en une semaine c'est torché.

 

Moi, je peux pas trop t'aider sur un code qui n'a ni queue ni tete ... dsl :/


Message édité par Zedlefou le 09-01-2009 à 10:37:50

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 09-01-2009 à 10:42:03    

ben en fait la méthode citée sur mon deuxieme message fonctionne... ça devrait me suffir dans un premier temps ! c juste la partie "Event.COMPLETE" qui ne sert à rien dans cette solution, en gros je ne peux pas agir sur mes pictos apres le chargement, mais visiblement ça ne pose pas de probleme pour les deplacer avant puisque je les mets dans des movieclips (ce sont les movieclips que je deplace), en gros mon probleme était que je ne pouvais pas passer la valeur de "n" (incrementation) dans ma fonction "function(evt:Event):void { }", donc je n'arrivais pas à deplacer mes pictos, en gros j'ai toujours bcp de mal à passer des variables dans mes fonctions avec écouteurs.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed