Director 7 - nouvelles fonctions Lingo 

 

 

Nous vous proposons d'explorer ici quelques-unes des possibilités nouvelles du Lingo de Director 7.0 et 7.0.2. Rappelons que le passage à cette "mise à jour 7.0.2" est fortement conseillé. L'installeur téléchargeable sur le site Macromedia, place plus de 180 fichiers dans la corbeille et parmi ceux-ci, l'application elle-même !

Termes Lingo abordés :

 

La fonction map()

La fonction map() requiert trois rectangles en argument et retourne un quatrième qui est au 3ème ce que le 2ème est au premier. vous n'avez rien compris ? Rassurez-vous, nous non plus au début ! Un simple et évidente application de cette fonction est la réalisation d'un effet de zoom.

 

Le déplacement par l'utilisateur du sprite 4, une simple forme QuickDraw déplaçable, provoque un déplacement proportionnel du grand bitmap (sprite 1) sous le sprite 3. La réalisation d'un tel effet était longuement expliquée dans un article récent du CrapoWeb. oubliez cela : plus aucun besoin de calculs savants désormais. On place simplement les protagoniste sur la scène, on rend le sprite 4 déplaçable en cliquant sur l'icône du milieu, ici...

...et, dans le script de tableau, simplement :

on ExitFrame
   sprite(1).rect = map(sprite(2).rect, sprite(4).rect, sprite(3).rect)
   go the frame
end

Director déforme seul le grand bitmap pour que son rapport au sprite 3 soit équivalent au rapport du sprite 1 au sprite 4. Déroutant de simplicité !

 

The windowType of window... = member x

C'est bien une MIAW (movie in a window) que l'on voit sur cette copie d'écran, une animation Director s'affichant dans une fenêtre percée en son centre !

 

Étrangement, seule la version mise à jour 7.02 permet de réaliser cet effet et d'utiliser un acteur bitmap en guise de windowType of window. Apparemment aussi ça ne marche que dans une projecteur. Voyons un peu cela ...

On doit d'abord créer une mini animation qui sera affichée dans la fenêtre. Nous enregistrons ce fichier sous le nom "petite.dir". Enfin, nous créons un nouveau fichier "principale.dir", notre lanceur qui une fois converti en projecteur, permettra d'ouvrir la MIAW "petite.dir".

Dans la distribution de "principale.dir" on crée un acteur bitmap que l'on converti ensuite en 1 bit par Modifier/Transformer bitmap... C'est cet acteur (ici en forme de cœur, member 3) qui nous servira de fenêtre (?).

La scène de "principale.dir" ne contient qu'un simple bouton auquel est associé le script suivant :

on mouseUp
  set the fileName of window "essai" to "petite.dir"
  set the windowType of window "essai" to member 3
  open window "essai"
end

On enregistre ce deuxième fichier puis, on le transforme par Fichier/Créer un projecteur...

Oh !

 

The stage.picture et crop()

La propriété "picture", propriété image d'un acteur de type bitmap n'est pas nouvelle. Ce qui l'est, c'est que désormais les fenêtres des MIAW (et donc la scène) sont dotées de cette propriété picture. Afin de mettre cela en évidence, nous nous proposons de réaliser un copie d'écran via Lingo. Trois lignes de code suffisent - saisies dans la fenêtre message.

on commence par créer via Lingo un nouvel acteur de type bitmap dans la distribution. ce sera l'acteur numéro 3 (la place est vide).

   new(#bitmap, member 3)

on obtient alors que cet acteur reprenne l'image de la scène par...

   member(3).picture = the stage.picture

Eh, pas mal ! Cet acteur aux dimensions de la scène vous parait-il trop grand ? lingo va nous permettre de le recadrer exactement à l'aide de la nouvelle instruction crop(). On notera au passage la syntaxe avec parenthèse de cette commande - À s'en tenir aux règles  il s'agit d'une fonction ! Étrange le Lingo ces derniers temps ! Reprenons : deux paramètres doivent être passés à crop() : le bitmap à recadrer et le rectangle de recadrage.

   crop(member 3, rect(20, 30, 120, 130) )

Et hop ! Un carré de 100 pixels de cotés nous apparaît dans la distribution. Dans l'exemple qui suit nous avons utilisé crop() en boucle sur une photo d'Imac afin de créer 100 acteurs. Nous aurions pu tout autant associer l'instruction à une auto génération de scénario (beginRecording).