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)