Créer votre Xtra outil
L'architecture ouverte de Director permet au développeurs
indépendants d'ajouter de nouvelles fonctionnalités
ou commandes à l'application. Le respect de quelques
règles édictées par Macromedia suffit
pour qu'un fragment de code externe soit reconnu par l'application.
Mais si la programmation en C n'est pas votre tasse de thé
sachez que Director peut reconnaître et intégrer
aussi les fichiers au format ... Director.
En effet, tout fichier d'animation
placé dans le dossier Xtras au lancement de l'application,
apparaîtra dans le menu Xtra. A l'appel de
la commande idoine, Director ouvrira l'animation dans une
fenêtre. Rien n'empêche alors l'animation ainsi
ouverte dans une fenêtre de contribuer à l'édition
du scénario principal. Lingo propose de nombreuses
commandes permettant de créer des scripts, de dupliquer
des acteurs... C'est sur ce principe que repose l'outil
"animation wizzard" (Assistant de l'animation) fourni avec
Director 5.x ++ ou encore EasyDialog
qui proposent tout deux depuis le menu Xtras, une interface
à la création d'effets de génériques
ou à l'utilisation de MUI.
Le CrapoWeb vous propose de mettre ce principe en uvre
afin de doter Director d'outil supplémentaires. En
l'occurrence nous réaliserons ici un Xtra générant
en quelques clics une trajectoire circulaire pour un sprite
sélectionné sur la scène. Suivez le
Crapo.
Utiliser la MOA
On commence par créer une nouvelle animation de
petite taille dont les acteurs boutons et contrôles
constitueront l'interface de notre Xtra. Ici nous voulons
une boîte permettant de choisir le diamètre
de la rotation ainsi que le nombre d'images (ou la vitesse)
de la trajectoire. La boîte et ses contrôles
peuvent-être simulés à l'aide de copies
d'écran (Commande - Shift - 3 sur Mac) de vrais dialogues,
découpées et montées dans Director
sur une seule image en boucle (go to the frame). Lorsque
l'animation s'ouvrira dans une fenêtre à sa
taille, elle présentera ainsi l'aspect d'une boîte
de dialogue. Les plus avancés souhaiterons peut-être
exploiter L'Xtra MUI pour fabriquer un VRAI dialogue mais
ils devront alors veiller à ce que l'animation soit
invisible en arrière plan (gestionnaire "on preparemovie",
voir plus bas).
Notre interface est prête. Avant même de lui
adjoindre les scripts qui la transformeront en Xtra outil
nous pouvons tester l'architecture ouverte en plaçant
le fichier d'animation dans le dossier Xtras de Director
(ou encore dans un sous-dossier, lui-même à
l'intérieur du dossier Xtras) et en relançant
l'application.
Un coup d'il au menu Xtra de Director : notre
animation est bien là. Et à l'appel de son
nom, Director ouvre une fenêtre d'animation.
Deux petits détails : La fenêtre utilisée
par Director reprend dans sa barre de titre le nom de fichier
de notre animation. Elle est dotée aussi d'une case
de redimensionnement. Nous devrons remédier à
ces défaut lors de la création de nos scripts.
Programmer L'Xtra (La génération de scénario)
Après nous être assurés de l'architecture
ouverte, il nous reste à reprendre l'animation Xtra
afin de programmer en Lingo la génération
de la trajectoire circulaire.
Par la commande Fenêtre/Script on demande la création
d'un script d'animation. Le gestionnaire on preparemovie
est exécuté avant l'apparition de l'animation.
On l'utilise ici pour forcer le type de fenêtre et
l'intitulé de la barre de titre.
on preparemovie
set the windowtype of the
activewindow to 4
set the title of the activewindow
to "Faire tourner la sélection"
end
Notre Xtra outil a pour fonction de générer
une trajectoire circulaire pour un sprite sélectionné.
Il nous faut donc avant tout nous assurer qu'un sprite et
un seul est sélectionné dans l'animation principale.
C'est ici que l'on doit mettre en uvre une de ces
commandes Lingo utilisables seulement en mode auteur :
The scoreSelection est une variable indiquant sous forme
de liste la ou les plages de cellules sélectionnées
dans le scénario. Par exemple, The scoreSelection
sera égal à [ [2,4, 34, 34], [16,16,34,34]
] si les sprite 2 à 4 ainsi que le sprite 16
sont sélectionnés sur le tableau 34. Attention
: C'est la sélection faite sur le scénario
principal qu'il nous faut tester et notre animation s'ouvrant
dans une fenêtre n'a pas directement accès
à cette information. Elle la demandera donc à
la scène (tell the stage) :
on startMovie
tell the stage
if count(the scoreselection ) <>
1 then --
si la liste des selections est multiple
alert ("Sélectionnez
un seul sprite et recommencez")
forget getLast(the
windowList) --
on ferme la fenêtre (la dernière ouverte)
exit --
et on arrête tout
end if
Ce test n'est pas suffisant car la sélection peut
contenir une cellules des pistes spéciales (tempo,
transition, script, palette, son). Ces pistes ont un numéro
nul ou négatif quand elles sont mentionnées
dans the scoreselection. On vérifie donc aussi cela
:
set LASELECTION to getAt(the scoreselection, 1) --
on extrait la liste incluse et forcément unique désormais
if getAt (LASELECTION, 1)
< 1 then
alert
("Sélectionnez un seul sprite et recommencez")
forget
getLast(the windowList)
exit
end if
Enfin, on doit veiller aussi au cas où la liste
unique incluse dans the scoreselection mentionnerait une
plage horizontale ou verticale de cellules contiguës.
if (getAt (LASELECTION, 1)
<> getAt (LASELECTION, 2)) or( (getAt (LASELECTION,
3) <> getAt (LASELECTION, 4)) then
alert
("Sélectionnez un seul sprite et recommencez")
forget
getLast(the windowList)
exit
end if
Ouf ! Après tous ces tests , on est assuré
que la sélection est unique. On prend en note la
position courante dans le scénario à l'aide
de variables. Parce qu'elles sont globales ces variables
créées par la scène ( dans une structure
"tell the stage... end tell") seront aussi disponibles pour
l'animation Xtra.
global
gLESPRITE
set
gLESPRITE to getAt (LASELECTION, 1)
global
gLIMAGE
set
gLIMAGE to the frame
Notre animation Xtra connaissant désormais le sprite
sélectionné. Nous pouvons lui apprendre à
lui donner une trajectoire circulaire :
set CENTREh to (the locH of sprite
gLESPRITE) - gDIAMETRE/2 --
on calcule ici un axe de rotation
set CENTREv to (the locV of sprite
gLESPRITE) --
relatif à la position initiale de la sélection
end tell
end
Cosinus, Sinus
Après ce travail d'initialisation, l'animation xtra
s'ouvre dans une fenêtre (si la sélection est
unique) et laisse l'utilisateur manipuler les contrôles.
Nous vous laissons le soin de programmer les contrôles
placés sur la scène qui permettent à
l'utilisateur de choisir le diamètre et la duréee,
et ce faisant, de renseigner deux variables : gDIAMETRE
et gNOMBREDIMAGES. Le gestionnaire "creeRotation" que nous
présentons ici et exécuté au clic sur
le bouton Ok et suppose que ces deux variables ont une valeur.
on creeRotation
global gDIAMETRE, gNOMBREDIMAGES,
gLESPRITE, gLIMAGE
Dans ce gestionnaire "creeRotation" nous devons ordonner
à la scène de créer plusieurs images
(frames) supplémentaires ( autant que gNOMBREDIMAGES)
et de placer sur chacune d'elles le sprite sélectionné
à un endroit différent. Pour calculer ces
positions successives (locH et locV) nous utiliserons les
fonction cos() et sin() en augmentant la valeur d'angle
à chaque image.
Si la rotation doit être complète, Il faut
un incrément qui, multiplié par le nombre
d'images de la trajectoire, aboutisse à un angle
maximal (en radians: pi * 2). Donc :
set ANGLE to 0
set INCREMENT to pi()*2 /
gNOMBREDIMAGES
set RAYON to gDIAMETRE/2
Le scène doit maintenant insérer les images
requises et y repositionner le sprite sélectionné.
La commande beginRecording lance une session de génération
de scénario :
tell the stage
beginRecording
repeat with n
= gLIMAGE to gLIMAGE + gNOMBREDIMAGES --
on commence sur l'image courante
set
the loch of sprite gLESPRITE to CENTREh + RAYON * cos(ANGLE)
set
the locv of sprite gLESPRITE to CENTREv + RAYON * sin(ANGLE)
if
n < gLIMAGE + gNOMBREDIMAGES then insertframe --
Pas d'insertion d'image après la dernière
if
ANGLE <= pi()*2 then
set
ANGLE to ANGLE + INCREMENT
else
set
ANGLE to 0
-- l'angle est désormais maximal, on revient à
zéro
end if
end repeat
endRecording
end tell
end
Notre Xtra outil est prêt. Pour l'utiliser, on glisse
le fichier d'animation dans le dossier Xtras et on relance
Director. Si nous plaçons un sprite sur la scène
vide et que nous appelons notre nouvelle commande dans le
menu Xtras, il nous sera désormais possible de créer
en quelques clics une trajectoire circulaire.
On peut de la même façon créer tout
un jeu d'outils Xtra, du plus simple au plus complexe. Les
lecteurs du CrapoWeb qui manqueraient d'imagination s'exerceront
par exemple à créer une fenêtre affichant
l'équivalent numérique (the keycode) pour
chaque touche enfoncée.
Téléchargez le fichier d'exemple non protégé
à glisser dans le dossier Xtra : crapotoo.zip.hqx
(10 Ko)
|