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 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)
<
Sommaire
|