Rechercher sur le site

[flash] Action Script - La commande SetInterval()

  • Auteur :tony Mise à jour :06-01-2007


Vous maitrisez les fonctions mais desormais vous souhaitez leur faire

prendre une part active dans votre animation. Je vais vous présenter

ici comment et pourquoi utiliser la commande setInterval() et son homologue

clearInterval().







// Pourquoi setInterval()

est plus rapide qu'aucune autre méthode ...



Et comme é chaque fois, un exemple sera vraiment plus parlant.

Imaginez que vous souhaitez afficher é l'écran l'incrémentation

d'un nombre. Sans la commande setInterval(), le principe le plus simple

pour faire afficher cette incrémentation est de faire 2 images,

l'une contenant le code d'incrémentation et la seconde, renvoyant

é la premiére, pour faire une boucle. La vitesse d'incrementation

est donc dépendante de la vitesse de lecture de l'animation ( donc

24 images par seconde pour une animation normale ). Autant dire que c'est

peu... br>






A-La méthode Simple



Réalisons ensemble cette animation :



Pour cela, on va créee une scéne contenant 2 calques:





- Le premier calque "Boutons" contient les boutons "Go"

et "Stop" ( dont le principe semble relativement compréhensible

) et l'affichage de la variable incrémentée "_root.Increment".



-Le second calque nommé "Incrémentation" contiendra

le code ActionScript.





Voici la partie code :











>Premier Calque : Bouton



>>Code du bouton Go : on (release) { gotoAndPlay(2);

}



>>Code du bouton Stop : on (release) { stop();}





>Second Calque : Incrémentation



>>Code Image 1 :



_root.Increment = 0; //Mise é zéro de la variable

incrémentée



stop(); //arret du clip en attente d'appui sur l'un des boutons



>>Code Image 2:



_root.Increment ++; //Incrémentation de la variable



>>Code Image 3:



gotoAndPlay(2); //renvoi é l'image 2







Et voici le résultat :



















Comme vous pourrez le constater, cela est assez rapide, mais au niveau

de la programmation, cela ressemble plus é de la bidouille, qu'é

un vrai code. On reste dépendant du systéme d'animation

de Flash, autant dire que cela limite grandement les possibilités.





B-La méthode setInterval()



La commande setInterval permet de répéter l'éxecution

d'une fonction é intervalles réguliers. Il est donc indispensable

de connaitre les fonctionnements des fonctions pour espérer utiliser

setInterval().



Reprenons la syntaxe de déclaration des fonctions :











function nom_de_la_fonction ( parametres )

{



corps de la fonction



}



Une fois déclarée, cette fonction peut étre utilisée

avec setInterval(), voici la syntaxe d'utilisation:











setInterval (nom_de_la_fonction , fréquence

, parametre1, parametre2... )



La fréquence est exprimée en millisecondes. En la réglant

é 1, on obtient donc 1000 répétitons é la

seconde, comparez donc avec les malheureuses 24 répétitions

que l'on obtenait auparavant !



Une fois cette commande lancée, il convient de pouvoir arréter

son execution, cela se fera par sa commande d'arrét : clearInterval().



Voici l'utilisation optimale et TRES fortement conseillée de ces

2 commandes:



Déclaration :











var NomInterval;
NomInterval = setInterval(

nom_de_fonction , frequence , parametre1, parametre2 ... );


Arrét :











clearInterval(NomInterval);




On s'attaque donc maintenant é modifier notre précedente

animation, pour la rendre plus efficace.



On va donc supprimer la précédente partie d'incrémentation

et y déclarer notre fonction d'incrémentation. Les commandes

setInterval() et clearInterval() seront lancées respectivement

par les boutons "Go" et "Stop".





Comme vous le voyez, la fonction Incrementation est simplissime, c'est

bien entedu toujours le cas des tutoriaux. Vos créations comporteront

des fonctions largement plus complexes.



Attaquons nous maintenant aux boutons :



>Le bouton Go :





Le code est é nouveau trés simple, on déclare

cet Interval au nom de IncrementationInterval, ce qui nous permettra

de le désigner lorsque l'on appuiera sur le bouton Stop.



>Le bouton Stop:





Cela devrait se passer de commentaires ! Voyons tout de

suite le résultat :























// Conclusions

Intermédiaires



Les 2 méthodes ont leurs avantages et leurs inconvénients.



La méthode A est nettement plus en harmonie avec

Flash, elle évitera nombre de probléme de synchronisation.

Cependant on deplorera sa lenteur, et les complications de sa mise en

oeuvre ( nombreuses images entre autres ...).



La méthode B qua t é elle, est é coup

sur celle qui ressemble vraiment é de la programmation et permet

une structure nettement plus ordonnée, et une mise en oeuvre ultra

simple. Par contre, le manque de synchronisation avec l'affichage de l'animation

demande une grande vigilance lors de la définition de la fréquence

et le résultat varie d'une machine é l'autre ( enfin, il

me semble ).





// Pour

aller plus loin dans l'utilisation de setInterval()



Si vous avez tout compris é ce que j'ai tenté

de vous expliquer auparavant, je vais pousser les explications encore

plus loin.



A- L'arret conditionnel



Lors de l'utilisation de setInterval() on peut avoir besoin

de faire stopper la commande é un certain moment. En reprenant

notre exemple d'incrémentation, imaginons que nous ayons besoin

de stopper l'incrémentation é 1000. Le seul moyen pour faire

arréter la commande au moment oé la variable est é

1000 est qu'au moment de l'incrémentation, on teste sa valeur et

qu'on en déduise si elle peut continuer ou non.



Si vous étes astucieux, vous penserez é modifier

la fonction répétée par setInterval pour qu'é

1000, l'incrémentation se stoppe. C'est certes une possibilité,

mais cela n'est ni adaptable, ni optimisé, car la commande setInterval

continuerait de tourner en fond, monopolisant des ressources.



La bonne méthode consiste é lancer en paralléle

une autre commande setInterval() qui tester a la valeur de la variable

selon la méme fréquence que la commande qui l'incrémente.

Si la variable est é 1000, alors on provoquera l'arrete de la commande

d'incrémentation, puis celle du test qui n'as plu lieu d'étre.



Avant d'arriver é l'exemple qui clarifiera tout,

attardons-nous quelques instants sur le point suivant...



B- L'utilisation unique



La syntaxe de déclaration de la commande setInterval()

impose la présence d'une fonction, comme vous l'avez remarqué.

Un peu plus haut dans ce tutorial, je vous ai donné une syntaxe

de déclaration fausse. Oui j'avoue , j'ai menti ! En fait vous

avez aussi la possibilité de lancer une fonction sans nom é

usage unique.



Je sais , éa ne rime pas é grand chose, mais

laissez moi vous expliquer. Vous avez bien vu que la fonction d'incrémentation

était ridiculement simple. Nous aurions tout a fait pu nous passer

de la déclarer au début de l'animation, car vraisemblablement,

elle ne sera utiliser que dans le cadre de l'appui sur le bouton "Go".

Dans ce cas, on aurait pu tout simplement déclaré les choses

de la sorte lors de l'appui sur ce bouton :







Au lieu d'avoir donné le nom d'une fonction deja

déclarée auparavant, on a donc déclaré une

fonction directement é l'interieur de la commande setInterval.



L'avantage notoire est que vous n'allez embrouillez votre

code avec des fonctions dont vous n'allez vous servir qu'une fois. Ce

qui est le cas parfait pour les fonctions d'arret conditionnel dont

j'ai parlé au paragraphe précédent.



C-Une pierre, deux coups !



Utilisons désormais ces 2 nouvelles notions pour

decider de faire arréter l'incrémentation passé

1000.



On va simplement modifié le code du bouton Go :







Et voici le fameux résultat :



















// Conclusion



Vous voilé donc enrichi de nouvelles connaissances

en programmation. La commande setInterval() est une vraie bénédiction

pour la programmation ActionScript, en particulier pour les effets graphiques.

N'hésitez pas é la tester de diverses maniéres, en

commencant simplement, comme dans la premiére partie, pour terminer

sur des effets complexes d'affichage.



Dans mes tutoriaux suivants, je serais amené é

l'utiliser énormement, c'est donc indispensable de bien en comprendre

le fonctionnement. Si vous avez des questions , n'hésitez pas é

les poser sur le forum Flash, et consultez les sources des trois animations

présentée...



Voici les Sources :





- Source

1



- Source

2



- Source

3





Scriptement, votre devoué serviteur, Monsieur Max




Cours en relation :


Comparez les offres de Credit auto
Erreur de connexion :