Déplacer donc la loupe au dessus du pingouin pour... voir
!
Créer un effet de projecteur lumineux sur une scène
obscure, une loupe ou un microscope... les applications sont nombreuses,
le procédé est déroutant et pourtant simple.
Yazo.net explique.
Tout repose ici sur le mode d'encre masque qui, appliqué
à un acteur bitmap permet de ne rendre visible qu'une partie
de celui-ci.
Pour déterminer la ou les zones de l'acteur qui doivent
seules apparaître sur la scène, on lui associe DANS
LA DISTRIBUTION un masque 1 bit (noir et blanc) créé
dans la fenêtre dessin de Director. Dans notre cas, le masque
est un rond de la taille d'une pièce de monnaie. Ce nouvel
acteur DOIT figurer dans la distribution à droite du bitmap
associé, Il ne sera à aucun moment utilisé
sur la scène :
On place le pingouin sur la scène et on lui applique l'encre
masque. Le pingouin n'apparaîtra qu'au travers une forme ronde,
celle-là même que le masque définit. Les autres
zones de l'images sont transparentes.
On profite alors de cette transparence pour placer une autre images
floue du pingouin sous la première (sur une piste plus haut-placée
du scénario). Le résultat : on donne l'impression
d'une image floue dont une zone réduite a fait l'objet d'une
mise au point. Un acteur supplémentaire, la loupe ici, parfait
le résultat.
L'effet est intéressant mais il convient maintenant de l'animer !
Le "trou" qui laisse voir l'image nette du pingouin doit pouvoir
bouger en même temps que la loupe. Seulement voilà
: le "trou" est définit par un acteur qui n'est pas utilisé
sur la scène ! Comment allons nous pouvoir redéfinir
la zone visible de l'image en mode masque, si nous ne pouvons déplacer
l'acteur 1 bit qui sert de masque?
L'astuce nous est révélée dès lors
que l'on observe comment Director utilise l'acteur 1 bit pour" percer"
l'image en mode masque. Director aligne tout simplement les centres
de ces deux acteurs c'est-à-dire que le "trou", la zone visible
est par défaut exactement situé au centre de l'image
transparente.
On ne peut pas déplacer un acteur qui n'est pas sur la scène
mais on peut déplacer le centre ou point d'alignement d'un
acteur. Le masque peut voir son centre redéfini or c'est
ce centre que Director aligne sur l'image associée pour la
rendre partiellement transparente. La propriété regPoint
of member va nous permettre de déplacer la zone visible :
Notre script n'occupera qu'un seul "frame" ou tableau :
on exitFrame
go to the frame
end
on mouseDown
-- on mesure la distance qui sépare le centre
-- de la loupe (sprite 3 ici) de la souris pour
-- éviter un "saut"
set DIFFERENCEh to the mouseH - the locH of sprite 3
set DIFFERENCEv to the mouseV - the locV of sprite 3
-- on note la position du regPoint (centre de gravité)
-- de l'acteur masque 1 bit ( ici un cercle de 80 pixels
-- de diamètre
set CENTREh to 40
set CENTREv to 40
-- il s'agit maintenant de déplacer la loupe
-- et aussi le regPoint de l'acteur masque
-- de manière correspondante
repeat while the stilldown
set the loc of sprite 3 to point( the mouseH-DIFFERENCEh, the
mouseV-DIFFERENCEv)
-- voilà pour le glisser de la loupe
-- Sans arrêt on note les valeurs de son déplacement
-- en comparant sa position nouvelle à sa position
-- d'origine (ici 122, 148)
set DEPLACEMENTh to (the locH of sprite 3) - 122
set DEPLACEMENTv to (the locV of sprite 3) - 148
-- Le point d'alignement du masque 1 bit ( ici acteur 2) doit
-- être déplacé depuis son centre de façon
équivalente
set H to CENTREh - DEPLACEMENTh
set V to CENTREv - DEPLACEMENTv
set the regPoint of member 2 to point (H,V)
updatestage