[AS3]gestion d'évènement [RESOLU] mais autre problème

mais autre problème [AS3]gestion d'évènement [RESOLU] - Flash/ActionScript - Programmation

Marsh Posté le 07-07-2007 à 19:57:57    

J'ai créé une classe qui récupère des jpg (dans tableaubitmap) puis possède une fonction de diaporama basé sur un timer. Le script:
 

Code :
  1. public class galerie extends MovieClip {
  2.  private var tableaubitmap:Array=new Array;
  3.  private var numero:int;
  4. private   var duree:Timer = new Timer (200,10);
  5.  public function galerie(nbgalerie:int) {
  6.   for (var i:int=0; i < 5; i++) {
  7.    var photo:Loader=new Loader;
  8.    photo.load(new URLRequest("galerie" + nbgalerie + "/diapo" + (i+1) + ".jpg" ));
  9.    tableaubitmap.push(photo);
  10.    tableaubitmap[i].alpha=(i == 0)?1:0;
  11.    addChild(tableaubitmap[i]);
  12.   }
  13.   numero=0;
  14.  }
  15.  public function executefondu(event:TimerEvent):void {
  16.   var suivante:int;
  17.   suivante=(numero == 0)?4:numero - 1;
  18.   tableaubitmap[numero].alpha -=0.1;
  19.   tableaubitmap[suivante].alpha +=0.1;
  20.  }
  21.  public function finfondu(event:TimerEvent):void {
  22.   var suivante:int;
  23.   suivante=(numero == 0)?4:numero - 1;
  24.   tableaubitmap[numero].alpha =0;
  25.   tableaubitmap[suivante].alpha =1;
  26.   numero=suivante;
  27.   lancefondu();
  28.  }
  29.  public function lancefondu() {
  30.   duree.addEventListener(TimerEvent.TIMER,executefondu);
  31.   duree.addEventListener(TimerEvent.TIMER_COMPLETE,finfondu);
  32.   duree.start();
  33.  }


 
Lorsque je lance la séquence, le fondu commence bien, puis lorsque la 3ème images s'affiche, tout part en c...lle. Je me demande si les évènements s'arrêtent vraiment à la fin du Timer.


Message édité par bobor le 08-07-2007 à 19:00:03
Reply

Marsh Posté le 07-07-2007 à 19:57:57   

Reply

Marsh Posté le 07-07-2007 à 20:34:27    

A mon avis ton problème est vers la fin
Je comprends pas pourquoi tu relance sun écouteur à chaque fois. Essaie de trouver une méthode plus clean, peut être.

 

   lancefondu();
            }
           
            public function lancefondu() {
                duree.addEventListener(TimerEvent.TIMER,executefondu);
                duree.addEventListener(TimerEvent.TIMER_COMPLETE,finfondu);
                duree.start();
            }


Message édité par Zedlefou le 07-07-2007 à 20:34:57

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

Marsh Posté le 08-07-2007 à 11:49:23    

je souhaite que le diaporama se fasse en boucle.
 
j'ai réécrit le code suivant tes conseils: plus de récursivité mais un Timer indéfini: Timer(200,0)
 

Code :
  1. public function executefondu(event:TimerEvent):void {
  2.   var suivante:int;
  3.   suivante=(numero == 0)?4:numero - 1;
  4.   if ((tableaubitmap[suivante].alpha >= 1) || (tableaubitmap[numero].alpha <=0)) {
  5.    tableaubitmap[numero].alpha =0;
  6.    tableaubitmap[suivante].alpha =1;
  7.    numero=suivante;
  8.    suivante=(numero == 0)?4:numero - 1;
  9.    trace("finfondu "+numero+" "+suivante);
  10.    trace("f0 "+tableaubitmap[0].alpha);
  11.    trace("f1 "+tableaubitmap[1].alpha);
  12.    trace("f2 "+tableaubitmap[2].alpha);
  13.    trace("f3 "+tableaubitmap[3].alpha);
  14.    trace("f4 "+tableaubitmap[4].alpha);
  15.   }
  16.   tableaubitmap[numero].alpha -=0.05;
  17.   tableaubitmap[suivante].alpha +=0.05;
  18.   trace("executefondu "+numero+" "+suivante);
  19.   trace("e0 "+tableaubitmap[0].alpha);
  20.   trace("e1 "+tableaubitmap[1].alpha);
  21.   trace("e2 "+tableaubitmap[2].alpha);
  22.   trace("e3 "+tableaubitmap[3].alpha);
  23.   trace("e4 "+tableaubitmap[4].alpha);
  24.  }
  25.  public function lancefondu() {
  26.   var duree:Timer = new Timer (200,0);
  27.   duree.addEventListener(TimerEvent.TIMER,executefondu);
  28.   /*duree.addEventListener(TimerEvent.TIMER_COMPLETE,finfondu);*/
  29.   duree.start();
  30.   trace("lancefondu "+numero);
  31.  }


Le code est plus propre mais j'ai toujours le même problème. En l'occurence, je constate qu'avec le trace dans lancefondu, cette fonction se répète. Au début après une petite 20aine d'occurence, puis après très rapidement. Elle n'a pas de raison de se réexécuter.
 
Ici un extrait de la console:

Code :
  1. executefondu 0 4
  2. e0 0.03515625
  3. e1 0
  4. e2 0
  5. e3 0
  6. e4 0.890625
  7. lancefondu 0
  8. executefondu 0 4
  9. e0 -0.01171875
  10. e1 0
  11. e2 0
  12. e3 0
  13. e4 0.9375
  14. executefondu 0 4
  15. e0 0.94921875
  16. e1 0
  17. e2 0
  18. e3 0
  19. e4 0.046875
  20. finfondu 4 3
  21. f0 0
  22. f1 0
  23. f2 0
  24. f3 0
  25. f4 1


 
Je mets également le code .fla:
 

Code :
  1. import galerie;
  2. var diapo1:galerie= new galerie(1);
  3. Galerie1.addChild(diapo1);
  4. diapo1.lancefondu();

Reply

Marsh Posté le 08-07-2007 à 12:46:29    

[RESOLU]
j'ai trouvé! en fait cela vient de la timeline dans le fichier fla. J'avais mis créé des images clés à 60 et rien après donc l'animation de mettait en boucle d'où relance du timer!
 
Bon ça résoud pas complètement mon problème car du coup je ne sais pas comment faire. En fait, c'est une notion que je n'avais pas appréhendé. Ne sachant pas encore comment je vais programmer mon animation, je vais chercher de mon côté.
 
Autre problème avec les évènements. Je voudrais charger mes fichiers diapoX.jpg jusqu'à ce qu'il n'y en ai plus dans le répertoire cible.  
Catch/Try ne correspond pas à mon besoin car l'erreur est asynchrone. J'utilise donc les évènements.
 

Code :
  1. public function galerie(nbgalerie:int) {
  2.   var i:int=0;
  3.   while (i<=4) {
  4.    var photo:Loader=new Loader;
  5.     photo.load(new URLRequest("galerie" + nbgalerie + "/diapo" + (i+1) + ".jpg" ));
  6.     photo.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,erreurfichier);
  7.     photo.contentLoaderInfo.addEventListener(Event.COMPLETE,chargefichier);
  8.     tableaubitmap.push(photo);
  9.     tableaubitmap[count].alpha=(count == 0)?1:0;
  10.     addChild(tableaubitmap[count]);
  11.     trace("galerie" + nbgalerie + "/diapo" + (i+1) + ".jpg" );
  12.     count+=1;
  13.     i=count;
  14.  }
  15.  }


 
Pour l'insant je charge 5 fichiers pour qu'il n'y ait pas d'erreur (la variable count, c'était pour faire des essais avec les procédures appelées sur évènement).  
Mon problème:
- je ne sais pas arrêter la boucle si l'évènement survient
- l'évènement arrive après la boucle.
 
Je ne vois pas comment réécrire l'algo.


Message édité par bobor le 08-07-2007 à 18:59:35
Reply

Sujets relatifs:

Leave a Replay

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