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

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  setInterval : definir le temps et la disparition

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

setInterval : definir le temps et la disparition

n°1929564
Ziguli
Posté le 06-10-2009 à 23:12:01  profilanswer
 

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
mood
Publicité
Posté le 06-10-2009 à 23:12:01  profilanswer
 

n°1929599
abais
Posté le 07-10-2009 à 08:59:59  profilanswer
 

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.
n°1929605
abais
Posté le 07-10-2009 à 09:06:59  profilanswer
 

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.
n°1930883
Ziguli
Posté le 10-10-2009 à 20:39:30  profilanswer
 

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!

n°1930885
abais
Posté le 10-10-2009 à 21:08:46  profilanswer
 

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.
n°1930889
Ziguli
Posté le 10-10-2009 à 21:37:26  profilanswer
 

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

n°1930938
abais
Posté le 11-10-2009 à 10:47:15  profilanswer
 

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.

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

  setInterval : definir le temps et la disparition

 

Sujets relatifs
Définir le chemin de l'adresse webmodifier le graphisme sur toute les pages du site en meme temps?
[PHP] Comment définir une variable contenant une include ?[Résolu]VBA comment optimiser l'utilisation CPU dans un loop?
[JTable] Probleme AbstractCellEditorUtilisation de Fork: plusieurs boucles executées en parrallèle
Calculer le temps d'executionTemps d'exécution du MD5
[JAVA] Définir une image de fond pour un JPanelLancer 2 actions en meme temps ?
Plus de sujets relatifs à : setInterval : definir le temps et la disparition


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR