Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
771 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1583612
bobor
tueur de n44b
Posté le 07-07-2007 à 19:57:57  profilanswer
 

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
mood
Publicité
Posté le 07-07-2007 à 19:57:57  profilanswer
 

n°1583617
Zedlefou
In cabbage we trust !
Posté le 07-07-2007 à 20:34:27  profilanswer
 

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
n°1583693
bobor
tueur de n44b
Posté le 08-07-2007 à 11:49:23  profilanswer
 

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();

n°1583702
bobor
tueur de n44b
Posté le 08-07-2007 à 12:46:29  profilanswer
 

[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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

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

 

Sujets relatifs
[Résolu] Script de backup Windows/SambaProblème avec la génération de certain PDF
[RESOLU] [AS2] Probleme de matrice/classe[PHP] Problème avec mysql_num_rows
Rendre un clip progressivement transparent avec AS3[MSSQL] probleme de date
Problème PHP ![Résolu][Sharepoint] Sécuriser le lien "All site content"
[Résolu] Problème IE et Firefox + alignement vertical 
Plus de sujets relatifs à : [AS3]gestion d'évènement [RESOLU] mais autre problème


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR