Utiliser les timers dans Director

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

Laisser un commentaire