On a très souvent besoin d’invoquer une fonction à intervalles réguliers dans Director. Je vais vous montrer ici comment mettre en oeuvre les timers de Director.
Création d’un timer
t1 = new timeout("timeoutid",1000, #affiche)
Ici, on affecte à une variable t1 la valeur retournée par l’objet timeout, ce qui nous permettra d’y faire référence par la suite, par exemple pour le supprimer.
L’objet timeout attend au moins 3 paramètres : un identifiant unique sous forme de chaîne de caractères, un nombre de millisecondes et le nom d’une fonction.
Dans l’exemple ci-dessus, la fonction affiche() sera appelée toutes les secondes.
attention : ce code n’est valable qu’à partir de MX 2004 !
Supprimer un timer
Par exemple, on veut afficher un compteur toutes les secondes pendant 10 secondes seulement
Code dans un script d’animation :
global t1, compteur
on startMovie
compteur = 0
t1 = new timeout("timeoutid",1000, #affiche)
end
on affiche
compteur = compteur + 1
if compteur < 11 then
-- on écrit la valeur de compteur dans un champ de texte
member("afficheCompteur").text = string(compteur)
else
member("afficheCompteur").text = "" -- on efface le champ
t1.forget() -- on supprime le timer
end if
end
exemple faisant appel à 2 timers
On a parfois besoin de créer plusieurs timers, par exemple si on veut afficher un objet et ensuite le masquer à intervalles réguliers. Dans l’exemple suivant, on affiche un sprite pendant 1/2 seconde, on le masque ensuite pendant une seconde et on recommence.
Voici le code à mettre dans un script d’animation
global t1, t2
on prepareMovie
sprite(1).visible = 0 -- on cache d'abord le sprite
t1 = new timeout("timeoutid",1000, #affiche) -- premier appel
end
on affiche
t1.forget() -- on supprime ce timer
sprite(1).visible = 1
t2 = new timeout("timeoutid", 500, #masque)--nouvel objet de tempo
end
on masque
t2.forget()
sprite(1).visible = 0
t1 = new timeout("timeoutid",1000, #affiche)
end
Voilà pour une utilisation basique des timers dans DIrector