setInterval : definir le temps et la disparition

setInterval : definir le temps et la disparition - Flash/ActionScript - Programmation

Marsh Posté le 06-10-2009 à 23:12:01    

Bonjour à tous!
 
Nouvelle dans la prog sur flash je cherche à faire apparaitre un chiffre (qui variera lorsqu'un bouton est pressé) sous la forme d'un texte dynamique qui disparaitra au bout de 3 secondes.
Après pas mal de recherches j'ai découvert setInterval, qui remplit son office, sauf que je ne sais pas vraiment où définir exactement ces 3 secondes. J'exclus un while car cela bloque l'application sans possibilité de faire autre chose que d'attendre...
 
Mon code en version short:
 

Code :
  1. function clearVolume(intervalID){
  2.     popup.text = "";
  3.     clearInterval(intervalID);
  4. }
  5.  
  6. function volumeDown(intervalID){
  7.     var pressTime:Number = getTimer();
  8.     
  9.     currentVolume--;
  10.     if (currentVolume == -1) currentVolume = 10;
  11.  
  12.     popup.text = "Volume: "+currentVolume; // j'affiche le niveau du volume. "popup" est le nom d'instance de mon texte dynamique
  13.     
  14.     while (getTimer()<pressTime+3000){    /*popup.text = "Volume: "+currentVolume*/        ;} // <--- et c'est ici que je veux le faire disparaitre, seulement je ne sais pas comment
  15.     clearVolume(intervalID);
  16. }
  17.  
  18.  
  19. function VolumeDownInterval(){
  20. var intervalID = setInterval(volumeDown(intervalID), 1); //je pense que l'argument 2 n'a pas d'importance vu que je fais un clearInterval par la suite
  21.     trace("getTimer "+getTimer());
  22. }
  23.  
  24.  
  25. var leftB:MovieClip = this["btnL"]; //btnL étant le nom d'instance de mon bouton
  26. leftB.onPress = VolumeDownInterval;


 
En vous remerciant d'avance pour quelques idées ou quelconque éclaircissement, je vous souhaite une agréable soirée!
Je précise que le projet est en AS2. Oui c'est has been mais c'est comme ça, on me l'a bien spécifié :)
 
Merci !


Message édité par Ziguli le 06-10-2009 à 23:15:02
Reply

Marsh Posté le 06-10-2009 à 23:12:01   

Reply

Marsh Posté le 07-10-2009 à 08:59:59    

Bon, quelques remarques :
 
Pourquoi ne mets-tu pas le onPress directement sur btnL ?
 
var intervalID = setInterval(volumeDown(intervalID), 1);
Tu déclare "intervalID" qui est égale à quelque chose qui dépend de lui même... C'est absurde
Pourquoi faire un setInterval d'1 milliseconde  :heink: autant appeler la fonction ciblée directement...
 
Je te donne une différente méthodologie, je ne testerai pas si ça marche mais je te donne ma vision :

Code :
  1. var currentVolume:int = 50; // je déclare le volume dans "la racine" de mon script
  2. var volumeMin:uint = 10; // Je fais des var min et le max ici, ils sont plus visible que DANS les fonctions.
  3. var volumeMax:uint = 100;
  4.  
  5. popup._alpha = 0; // texte invisible par défaut.
  6. var disparitionTime:Interval; // Je ne sais pas si le type "interval" existe !!!
  7. var intervalHappening:Boolean = false; // Une var pour surveiller si le volume est afficher déja
  8.  
  9. btnL.onPress = changeVolume("up" );
  10. btnR.onPress = changeVolume("down" ); // Lui je l'anticipe :D
  11.  
  12. function changeVolume(action:String)
  13. {
  14.   switch(action)
  15.   {
  16.       case "up" :
  17.          if (currentVolume < volumeMax){ currentVolume++ };
  18.          break;
  19.       case "down" :
  20.          if (currentVolume > volumeMin){ currentVolume-- };
  21.          break;
  22.   }
  23.   showVolume();
  24. }
  25.  
  26. function showVolume()
  27. {
  28.   popup.text = "Volume: "+currentVolume;
  29.   popup._alpha = 100;
  30.   // Si un interval est deja en court, on le supprime avant qu'il appel la fonction de fin :
  31.   if (intervalHappening)
  32.   {
  33.      clearInterval(disparitionTime);
  34.   }
  35.   // Et on le (re)lance
  36.   disparitionTime = setInterval(hideVolume(),3000);
  37.   intervalHappening = true; // .. En disant qu'un interval est en court !
  38. }
  39.  
  40. function hideVolume()
  41. {
  42.   intervalHappening = false; // L'interval est terminé
  43.   popup._alpha = 0; // On cache le texte
  44.   clearInterval(disparitionTime); // et on supprime l'interval
  45. }


Bon, je pense avoir rien oublié ...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 07-10-2009 à 09:06:59    

Rien ne t'empêche d'utiliser la fonction Tween pour faire apparaitre/disparaitre le popup en fondu...
 
Bon, et d'après la coloration syntaxique du forum, le typage Interval n'existe pas... Je ne connais pas ce qu'il faut en AS2... En as3 c'est un :Timer, mais la je ne sais pas...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 10-10-2009 à 20:39:30    

Salut,
 
Merci beaucoup pour ta réponse, je trouve en effet l'algo beaucoup mieux pensé, je m'embrouillais sur la fin!
 
Par contre je ne sais pas si j'ai loupé un truc mais dans mon cas, le hideVolume arrive tout de suite (pas de prise en compte du 3000?). Du coup je n'ai toujours pas controle sur la notion de temps.
 
Une idée? Dans ce que j'ai pu lire, le 3000 est l'interval de répétition (=il arrive de suite et se répète toutes les 3s. Dans mon cas il arrive de suite et fait un clearInterval). A par un boucle while (donc pourrie) je ne sais donc toujours pas contourner le problème...
 
Merci d'avance pour ton aide, c'est bien le seul truc sur lequel je bloque qui me rend dingue!

Reply

Marsh Posté le 10-10-2009 à 21:08:46    

Encore une fois, je ne connais pas trop AS2, en AS3 on utilise un Timer... c'est 10X mieux fait (point de vue personnel)


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 10-10-2009 à 21:37:26    

J'ai trouvé !
Il faut faire disparaitre le texte APRES le clearInterval, c'est à dire:
 
 clearInterval(disparitionTime);
 popup._alpha = 0;
 
Merci pout tout !

Reply

Marsh Posté le 11-10-2009 à 10:47:15    

Tiens, c'est curieux, vu que le code était interprété de manière linéaire, j'aurais pensé que c'était la dernière instruction à donner...
Comme un delete onEnterFrame conditionné quoi...
C'est pas logique tout ça ><


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Sujets relatifs:

Leave a Replay

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