ANIMATION DAUPHINS


English version

Le but de cet article est de montrer comment jouer une série d'images à l'emplacement du pointeur de la souris lorsque l'utilisateur clique. Pour cela nous allons utiliser les concepts de liste globale, comportement et envoi de message vers une image-objet.

 

Premièrement il nous faut une série d'images formant une animation complète. Pour créer un effet joli, la première et la dernière image de la suite doivent être vides. Ci-dessous, une animation en 31 images d'un dauphin une fois importée dans la distribution.

J'ai trouvé cette animation sur Internet sous forme d'un fichier .AVI sur fond bleu.

L'animation du dauphin, Microsoft Age of Empires II

Dans Macromedia Director, il est nécessaire d'avoir un fond blanc pour la transparence, j'ai donc importé le fichier dans Microsoft Gif Animator, exporté chaque image en .GIF, puis convertit le fond bleu en blanc sous Adobe Photoshop. Ensuite j'ai importé toutes les images dans Macromedia Director et les ai nommé sous la forme d'une lettre suivi d'un nombre, la série commencant par une image complètement blanche (ex. d0, d1, ..., d30).

Dans la fenêtre dessin, s'assurer que le point d'alignement est bien le même pour chaque image, sinon cela créé un effet de décalage lors de la lecture.

La programmation Lingo est relativement simple, en tout et pour tout il faut créer trois scripts :

  1. Un script on startmovie qui initialise la liste globale free_sprites. Cette liste contient les numéros des images-objets qui peuvent être utilisés pour lancer une animation.
  2. Un script on exitframe qui gére les clics de la souris et l'envoi du message de démarrage aux images-objets de la liste free_sprites.
  3. Un script comportement qui gére une animation, on affecte ce script à chaque image-objet.

Voici le détail des trois scripts :

 

on startmovie

global free_sprites

set free_sprites=[]

-- initialise une liste globale vide

end

on exitFrame

global free_sprites

if ((the mousedown=TRUE) and (count(free_sprites) <> 0)) then

-- SI le bouton de la souris est appuyé

-- ET que la liste n'est pas vide ALORS

sendsprite getat(free_sprites, 1), #start, point(the mouseh, the mousev)

-- Envoie un message de démarrage à la première image-objet de la liste

-- avec la position de la souris en paramètre

end if

go the frame

-- boucle sur l'image

end

 
 

-- Comportement pour gérer une image-objet animée

global free_sprites

property mysp, mymax, mycurrent, myletter, mystart

on beginsprite me

set mysp= the spritenum of me

-- Numéro de l'image-objet sur le scénario

set mymax = 30

-- Nombre maximum d'images

set mycurrent = 0

-- Image en cours à 0

set myletter = "d"

-- Lettre ou nom de la série

set mystart = 0

-- Déclencheur d'animation à 0

add(free_sprites, mysp)

-- Ajoute son numéro d'image-objet à la liste des images-objets libres

end

 

on exitframe me

if mystart = 1 then

-- SI l'animation est déclenché ALORS

set mycurrent = mycurrent + 1

-- Incrémente le numéro de l'image en cours

if mycurrent > mymax then

-- SI l'image en cours est supérieure au maximum ALORS

set mycurrent = 0

-- Replace l'image en cours sur l'image vide

set mystart = 0

-- Arrête l'animation

add(free_sprites, mysp)

-- Et ajoute son numéro d'image-objet à la liste des images-objets libres

end if

set the member of sprite mysp to member string(myletter&mycurrent)

-- Adapte l'image en cours

end if

end

 

on start me, newloc

set the loc of sprite mysp to newloc

-- place l'image-objet à l'endroit indiqué par newloc

set mystart = 1

-- déclenche le démarrage de l'animation au prochain exitframe

deleteat(free_sprites, 1)

-- efface son numéro de la liste

end

 

Finalement, il faut placer les images-objets sur la scène, prendre soin de mettre l'acteur du début de la série (d0) afin qu'il ne soit pas visible (image vide). Ensuite choisir l'encre fond transparent, puis affecter le script de comportement à cette image-objet. Copier-coller l'image-objet plusieurs fois, le nombre d'images-objets devrait être le nombre d'images de l'animation + 1 (ex. d0 .... d30 --> 32 images-objets) afin qu'il n'y ait pas de décalage et qu'il y ait toujours une image-objet libre dans la liste free_sprites.

 

Ci-contre, le résultat sous forme d'animation Shockwave. Clique dessus pour voir bondir les dauphins.

 

 

En conclusion, il est souhaitable de transformer le script de comportement afin de pouvoir le réutiliser facilement. Pour cela, les variables mymax et myletter doivent être configurables en les mettant dans une fonction on getpropertydescriptionlist au début du script. Il est alors possible de gérer plusieurs animations en utilisant plusieurs listes globales.

Le fichier Director compressé (.ZIP 20ko) est ici.

Si tu rencontres un problème lors de l'implémentation ou bien si tu as fais quelque chose de vraiment cool avec cette technique, je suis joignable ici.