Cours Lingo version 8-5 9 séances de 3 heures Sujet à traiter 1

Transcription

Cours Lingo version 8-5 9 séances de 3 heures Sujet à traiter 1
Cours Lingo version 8-5
9 séances de 3 heures
Sujet à traiter
1. Rappel
a. La fenêtre de messages
b. Les opérateurs
i. Opérateurs mathématiques
ii. Opérateurs de comparaisons
iii. Opérateurs logiques
iv. Opérateurs de concaténation ( pas fait – manque la notion de variable texte).
c. Les gestionnaires
i. Principes
ii. Paramètres et arguments
iii. Fonctions
d. Les différents types de scripts
i. Scripts d’animations
ii. Comportements (scripts de scénario)
iii. Scripts d’acteurs
iv. Scripts parents
e. Evènements et priorités des scripts
f. Les variables
i. Les différents types de variables
1. Entiers
2. flottants
3. chaînes
4. symboles
5. listes
6. objets
ii. L’étendue des variables
g. Le debbugage
i. La fenêtre de messages
ii. La fenêtre de surveillance
iii. La fenêtre du débogueur
h. Généralité sur les images
i. Généralité sur le son
2. Les listes
3. La programmation orientée objet (POO)
4. Lingo et les images-objets
5. Lingo et le texte
6. Lingo et les formes vectorielles (vecteur et flash)
7. Lingo et le son
8. Lingo et la vidéo
9. Animation dans une fenêtre
10. Les xtras
Bibliographie
Lingo le guide du programmeur
JR NYQUIST R MARTIN
OEM
Collection micro pro
580 pages - 2001
ISBN : 2746401673
DIRECTOR 8.5 (+ CD-ROM)
Andrew ALLENSON
Traduit de l' anglais
DUNOD
880 pages - 2002
ISBN : 2100059238
Lingo 8.5
Rappel
Lingo, le langage de Director
Généralités
Lingo est le langage de développement de director.
Il permet une programmation évènementielle orientée objet.
Il ne s’agit pas d’un langage de bas niveau. Il possède une syntaxe facilement compréhensible par le débutant. A l’origine la syntaxe
dite ‘verbose’ était proche du langage naturel. Depuis la version 7 de Director, Macromédia à intégré une syntaxe dite ‘pointée’ plus
proche des langages modernes tel que le C ou la Java.
La syntaxe ‘verbose’ est toujours utilisable. Toutefois, pour des questions de performance, il semble préférable d’éviter de mélanger
les deux types de syntaxes dans une même instruction.
Les équipes de développement de Macromédia n’ont cessé de faire évoluer le langage Lingo. Aujourd’hui il comprend plusieurs
centaines d’instructions dans les domaines suivants :
• Gestion de l’interactivité
• Gestion des différents médias supportés par Director (textes, images, son, vidéo, flash…)
• Gestion du réseau (NetLingo)
• Gestion du serveur MultiUtilisateurs
• Production ou édition d’images (ImaginLingo)
• Gestion de la 3D
• …
Le fenêtre de Messages (Ctrl + M)
La fenêtre de messages permet de tester toutes les commandes Lingo.
Pour afficher le résultat d’une commande Lingo dans la fenêtre messages, utiliser la commande ‘put’
Dans la fenêtre Messages taper : ‘put the environment'
put the environment
-- [#shockMachine: 0, #shockMachineVersion: "", #platform: "Windows,32", #runMode: "Author", #colorDepth: 16, #in
ternetConnected: #offline, #uiLanguage: "French", #osLanguage: "French", #productBuildVersion: "187"]
Figure 1 : La fenêtre de messages
put "toto"
-- "toto"
put toto
-- <Void>
put 50
-- 50
put 50 + 10
-- 60
La commande put peut également être utilisée des scripts Lingo. Le résultat sera également affiché dans la fenêtre de messages (Voir
le chapitre debugage).
Les commentaires
Il est possible de placer des commentaires dans le code Lingo. Ces commentaires ne seront pas exécutés par le moteur de Lingo.
Les commentaires ont deux finalités principales :
• Documentation du code.
Documenter votre code permet de le rendre le programme que vous écrivez plus compréhensible pour vous-même mais
aussi pour les développeurs qui prendront le relais de votre travail dans l’avenir.
• Test et debugage
Il est parfois utile de supprimer quelques lignes de codes lors de la recherche d’erreurs. Plutôt que de supprimer
physiquement des lignes de codes, vous pouvez les mettre en commentaires. Elles seront ignorées par Director. Nous
reviendrons sur les techniques de débugages dans le chapitre debugage.
Pour insérer un commentaire dans du code Lingo, il faut utiliser le signe ‘--‘.
-- ceci est un commentaire
Il est également possible de placer un commentaire après une instruction Lingo
Put 'toto' -- ce commentaire situe apres l'instruction ne sera pas execute
Si un commentaire tient sur plusieurs ligne, chaque ligne du commentaire devra commencer par ‘—‘.
-- Voici un commentaire sur plusieurs ligne
-- Chaque ligne doit commencer par --
Les variables
Le propre d’un langage de programmation est de faire des opérations (affectation, calcul, comparaison…) sur des valeurs. Ces
valeurs peuvent être saisies par l’utilisateur, issues de calcul ou de fichiers. Pendant l’exécution d’un programme, ces valeurs
sont stockées dans la mémoire vive de l’ordinateur sous forme de variables.
Dans certains langages de programmation, il est obligatoire de déclarer une variable avant de pouvoir l’initialiser. Ce n’est pas
le cas avec Lingo.
Avec Lingo, le simple faite d’affecter une valeur à une variable, crée cette variable en mémoire.
Depuis la version 7 de Director, il n’est même plus obligatoire d’utiliser la commande ‘set’ pour déclarer une variable.
Si Lingo rencontre un mot qu’il ne connaît pas, il considère qu’il s’agit d’une variable.
put MaVariable
-- <Void>
Dans l'exemple précédent, on demande à Lingo d’afficher le contenu de la variable MaVariable.
Cette variable n’existant pas, Lingo la crée. <Void> signifie que la variable ne contient aucune valeur.
Lingo et la portée des variables.
Dans l’environnement de développement Lingo, les variables peuvent avoir deux portées.
Les variables locales :
Une variable locale n’existe que dans le gestionnaire ou elle est initialisée. Dés que le gestionnaire ayant initialisé une variable
locale est exécuté, la variable disparaît de la mémoire. Elle n’est donc plus accessible.
Deux variables locales peuvent porter le même nom dans deux gestionnaires différents ; cela ne pose pas de problème. Il est
classique d’utiliser plusieurs variables nommées x ou y comme compteur de boucles.
Les variables globales :
Une variable globale a une portée globale. Elle peut être utilisée par tous les gestionnaires de l’application. Si l’application est
découpée en plusieurs animations, les variables globales seront accessibles par toutes les animations.
Pour définir une variable globale, il faut utiliser l’instruction global suivie du nom des variables globales.
Dans l’exemple suivant, trois variables globales sont définies dans une même instruction.
global gJoueur, gTour, gScore
Afin de différencier les variables locales des variables globales, il est de coutume d’utiliser le ‘g’ minuscule comme première
lettre du nom de la variable globale.
L’instruction showGlobals permet d’afficher dans la fenêtre de messages toutes les variables globales initialisées ainsi que
leurs contenus. Cette instruction est pratique pour le débugage.
L’instruction clearGlobals donne à toutes les variables globales la valeur Void.
Lingo et les types de variables :
Type de
variable
Chaine
Entier
Flottant
Exemples
“ Toto “, “aaa ! “, “ Ceci est une chaine de caractères “, “ 12345 “
1, -10
1.5, -10.25, 99999.99
Constante
Symbole
Liste
Objet
True, false, return, quote
#ok, #mort
[1,2,3], [“toto“,1, 2], [[1],[9,9,9]], [#id :121, #lib : “toto”]
<offspring “toto“ 2 12589ac>
1. Les chaînes de caractères
Une variable de type chaîne contient une suite de caractères alphabétiques ou numériques.
Pour tester si une variable est de type chaîne, vous utilisez la fonction StringP
MaVariable = "toto"
Put MaVariable.StringP
-- 1
Le contenu de MaVariable est bien une chaîne.
2. Les entiers
Une variable de type entier contient un nombre entier positif ou négatif.
Pour tester si une variable est de type entier, vous utilisez la fonction IntegerP
MaVariable = -10
Put MaVariable.IntegerP
-- 1
Le contenu de MaVariable est bien un entier.
3. Les flottants
Une variable de type flottant contient un nombre à virgule positif ou négatif.
Pour tester si une variable est de type entier, vous utilisez la fonction FloatP
MaVariable = 1.5
Put MaVariable.FloatP
-- 1
Le contenu de MaVariable est bien un nombre à virgule.
4. Les constantes.
Les constantes sont des éléments dont la valeur ne change pas.
L’exemple suivant permet de tester si l’utilisateur a appuyé sur la touche ‘Entrée’.
if the key = Return then
alert "Vous avez appuye sur la touche Entree"
end if
5. Les symboles.
Un symbole est une chaîne de caractères précédée du signe #. Un symbole est une constante définie par le programmeur
pour les besoins de son développement.
Voici quelques exemples de symboles
#ok
#marche
#course
#arret
Le symbole est traité par Lingo aussi rapidement qu’un entier mais il est plus parlant pour le programmeur.
Dans les deux exemples suivants, le résultat sera identique. Mais le premier exemple sera traité plus rapidement par Lingo
que le second.
if sens = #gauche then
Sprite(1).loch = sprite(1).loch - 5
else
Sprite(1).loch = sprite(1).loch + 5
end if
if sens = "gauche" then
Sprite(1).loch = sprite(1).loch - 5
else
Sprite(1).loch = sprite(1).loch + 5
end if
Une autre solution syntaxe aurait produit le même résultat en conservant la rapidité d’exécution. Par contre, l’interprétation
du code pour le programmeur est moins aisée, surtout si ce programmeur s’occupe de la maintenance de l’application sans
avoir participé au développement.
if sens = 1 then
Sprite(1).loch = sprite(1).loch - 5
else
Sprite(1).loch = sprite(1).loch + 5
end if
Pour tester si une variable est de type symbole, vous utilisez la fonction SymboleP
allure = #course
Put allure.SymboleP
-- 1
6. Les listes
Les listes sont des variables qui permettent de stocker plusieurs valeurs. L’opérateur permettant de désigner une liste est le
crochet [].
Voici un exemple de listes
Joueurs= ["toto","titi","tata"]
Pour tester si une variable est de type liste, vous utilisez la fonction ListeP
Joueurs= ["toto","titi","tata"]
Put Joueurs.ListeP
-- 1
Il existe deux types de listes :
Les listes linéaires
Les listes de propriétés
Nous reviendrons plus en détail sur les listes dans un chapitre ultérieur.
7. Les objets
Les objets sont à la base de la programmation orientée objet (POO).
Un objet permet d’associer des variables appelées propriétés et du code.
Nous reviendrons plus en détail sur le concept d’objet dans les chapitres ultérieurs.
Les opérateurs
Lingo
•
•
•
•
utilise différents opérateurs pour les opérations :
d’affectation
de calcul
de comparaison
de concaténation.
Opérations d’affectation
L’opérateur d’affectation est le signe ‘=’.
Set MaVariable = 10
Le chiffre 10 est affecté à la variable MaVariable.
Vous pouvez utilisez d’autres syntaxes :
MaVariable = 10
set MaVariable to 10
set 10 into Mavariable
Les deux dernières lignes de code correspondent à la syntaxe dite ‘verbose’ de Lingo.
set MaVariable = MaVariable + 1
Cette ligne de code ajoute 1 au contenu de la ma variable appelée MaVariable. L’opération située à droite du signe = est
d’abord effectuée (MaVariable + 1). Puis le résultat obtenu est affecté à MaVariable.
Opérations mathématiques
a. Addition, soustraction, multiplication et division
Les opérateurs + - * / sont utilisés pour les opérations mathématiques. Les opérateurs mathématiques peuvent être
utilisés avec des nombres (entiers ou à virgule) mais aussi avec des chaînes.
MaVariable = 5 + 4
put MaVariable
-- 9
Le résultat de l’addition de deux entiers donne un entier.
MaVariable = "5" + 4
put MaVariable
-- 9.0000
Dans cet exemple, on voit que Director évalue la chaîne ‘5’ en nombre à virgule, puis effectue l’addition.
MaVariable = 5.0 + 4
put MaVariable
-- 9.0000
Si l’un des opérandes de l’addition est un nombre à virgule, le résultat est un nombre à virgule.
Avec la division le résultat est plus visible :
MaVariable = 5 / 2
put MaVariable
-- 2
MaVariable = Mavariable * 2
put mavariable
-- 4
Comme le montre le résultat de l’enchaînement d’une division et d’une multiplication, la division du nombre entier 5 par
le nombre entier 2 donne bien le nombre entier 2.
Pour obtenir un résultat à virgule, l’un des deux opérandes doit être un nombre à virgule ou une chaîne.
MaVariable = 5.0 / 2
put MaVariable
-- 2.5000
MaVariable = Mavariable * 2
put mavariable
-- 5
MaVariable = "5" / 2
put MaVariable
-- 2.5000
b. Le modulo
Le modulo (mod) permet d’obtenir le reste d’une division.
MaVariable = 7 mod 2
put MaVariable
-- 1
Dans cette opération, 5 est le dividende et 2 le diviseur. L’opérateur mod renvoie le reste 1.
L’opérateur mod ne fonctionne qu’avec des entiers. Si l’un des opérandes est un nombre à virgule, Director l’arrondira
avant d’effectuer le modulo.
MaVariable = 7.4 mod 2
put MaVariable
-- 1
Dans cet exemple, le nombre à virgule 5.4 est arrondi à 5 avant que Director n’effectue le modulo.
MaVariable = 7.5 mod 2
put MaVariable
-- 0
Dans cet exemple, le nombre à virgule 5.5 est arrondi à 6 avant que Director n’effectue le modulo.
c. Priorités et parenthèses
Director suit les règles de priorités de l’algèbre.
Vous pouvez utilisez les parenthèses à deux fins :
• faciliter la lecture d’un calcul
put 10 + 2 * 5
-- 20
put 10 + (2 * 5)
-- 20
•
intervenir dans les règles de priorités de l’algèbre.
put (10 + 2) * 5
-- 60
Dans ce cas, l’expression entre parenthèse est évaluée en premier. Puis le résultat est multiplié par 5.
Opérateurs de comparaison
Lingo reconnaît les mêmes opérateurs de comparaison que l’algèbre.
Opérateur
Signification
=
Egal à
>
Supérieur à
<
Inférieur à
>=
Supérieur ou égal à
<=
Inférieur ou égal à
<>
Différent de
Lorsqu’un opérateur de comparaison est utilisé, Lingo retourne une valeur booléenne. Une valeur booléenne est égal à vrai (1)
ou à faux (0).
put 2 = 2
-- 1
L’exemple précédent signifie que la comparaison 2 = 2 est vrai
Voici quelques exemples d’égalités sur des nombres, des expressions et du texte.
put 3 > 2
-- 1
put 3 <> 2
-- 1
put 3 + 2 = 2 + 2 + 1
-- 1
put "Director" = "Director"
-- 1
put 3 = 2
-- 0
L’exemple précédent signifie que la comparaison 3 = 2 est fausse.
Voici quelques exemples d’inégalités entre des nombres, des expressions et du texte.
put 5 < 7
-- 1
put 3 + 2 > 1
-- 1
put "Director" = "Lingo"
-- 0
put "aa" > "ab"
-- 0
put "Director" = "DIRECTOR"
-- 1
L’exemple précédent nous montre que director ne fait pas de distinction entre les majuscules et les minuscules.
Précédemment nous avons vu que la division de deux entiers donne toujours un entier. Si nous voulons obtenir un résultat
avec virgule, un des opérandes de l’opération doit être un nombre à virgule.
Nous pouvons vérifier ici cette méthode de calcul de Director en testant l’égalité suivante :
put 5 / 2 = 5.0 / 2
-- 0
La division de 5 par 2 donne 2. Ce chiffre est bien un entier, il ne s’agit pas d’un format d’affichage sans virgule puisque
l’égalité 5 / 2 = 5.0 / 2 donne un résultat faux.
Les opérateurs logiques
Lingo dispose de trois opérateurs logiques.
Opérateur
And
Or
not
Signification
Et
Ou
Non
Lorsque Lingo rencontre un opérateur de comparaison, il évalue les deux opérandes en tant que valeur booléenne (vrai ou
faux) et retourne une valeur booléenne.
a. L’opérateur And
L’opérateur And permet de tester si les deux opérandes sont vrais.
Si les deux opérandes sont vrais, Lingo retourne vrai. Dans tous les autres cas, Lingo retourne faux.
put 1 and 1
-- 1
Lingo considère que tout entier positif ou négatif est vrai.
put -1 and 3
-- 1
Si l’un des opérandes est faux, Lingo retourne faux.
put 1 and 0
-- 0
put 0 and 5
-- 0
put 0 and 0
-- 0
b. L’opérateur Or
L’opérateur Or permet de tester si au moins un des deux opérandes est vrai. Dans ce cas, Lingo retourne vrai.
Si les deux opérandes sont faux, Lingo retourne faux
put 1 or 0
-- 1
put 1 or 1
-- 1
put 5 or 2
-- 1
put 0 or 0
-- 0
c. L’opérateur Not
L’opérateur Not permet de retourner le contraire d’une valeur booléenne.
put not 1
-- 0
put not 0
-- 1
Les opérateurs logiques peuvent être combinés entre eux. Pour tester des expressions complexes vous pouvez également
utiliser les parenthèses.
put (1 and 1) or (1 and 0)
-- 1
Les différents types de scripts
Dans Director, il existe quatre type de scripts :
• Les scripts d’animations,
• les scripts de comportements,
• les scripts d’acteurs,
• les scripts parents.
Les scripts d’animations.
Les scripts d’animations ont de multiples utilisations :
• Ils sont accessibles depuis toute l’animation, c’est-à-dire que vous pouvez les appeler depuis n’importe quels
gestionnaires.
• Ils servent à stocker les fonctions que vous développerez.
• Il permettent de gérer des évènements comme le lancement ou l’arrêt de l’animation. L’événement startMovie est
parfait pour l’initialisation des variables globales. Il s’exécute automatiquement une fois au lancement de l’animation.
Les comportements.
Un comportement peut être associé dans le scénario à une image-objet ou à une image.
Il faut faire des shoot d’écrans pour illustrer les différentes procédure
a. Les comportements d’image-objet.
Les comportements permettent de gérer les actions de l’utilisateur en rapport avec les images-objets présentes sur la scène
comme le survol (roll-over) ou le clic…
Pour créer un comportement sans l’associer à une image-objet particulière :
• ouvrez la fenêtre de script (CTRL+0),
• cliquez sur l’icône plus pour créer un nouveau script,
• dans l’inspecteur de propriétés, vérifier que le script est bien de type comportement.
Pour créer un comportement en l’associant directement à une image-objet :
• sélectionnez une image-objet dans le scénario,
• ouvrez l’inspecteur de propriété,
• cliquez sur l’onglet comportement,
•
•
•
•
cliquez sur l’icône ‘plus’,
sélectionnez ‘nouveau comportement’,
donnez un nom au nouveau comportement et validez,
le nouveau comportement doit apparaître en sur brillance dans la liste des comportements associés à l’imageobjet,
cliquez sur l’icône fenêtre de script (CTRL+0),
dans la fenêtre de script saisissez le nouveau comportement.
Un même comportement peut être associé à plusieurs image-objets. Par exemple, vous pouvez créer un comportement
unique pour la gestion de tout les rollover de votre application. Il vous suffira ensuite de le placer sur toutes les imagesobjets nécessitant ce type de comportement. Nous verrons plus tard comment écrire ce type de comportement.
Les comportements d’image ou scripts d’image.
Les scripts d’image sont placés au niveau des images sur la piste spécialisée réservée aux scripts.
Il permettent d’intercepter au niveau d’une image des messages tel que enterFrame ou exitFrame.
Le script d’image le plus utilisé est le suivant :
On exitframe
Go to the frame
end
Il permet à la tête de lecture de boucler sur une image. L’utilisateur prendre le temps de découvrir un écran de l’animation
et choisir la suite de ses pérégrinations en fonction de l’interactivité mise en place. Ce type de script doit être utilisé chaque
fois que l’utilisateur doit indiquer un choix.
Pour créer un script d’image :
• Double cliquez sur la piste spécialisée des scripts
la fenêtre de script s’ouvre
• Saisissez le script voulu.
Les scripts d’acteur.
Un script d’acteur est un script attaché directement à un acteur. Chaque image-objet créée à partir de cette acteur possèdera
donc une occurrence du script d’acteur.
Le scripts d’acteurs sont de moins en moins utilisés au profit des comportements d’images-objets.
Pour créer un script d’acteur :
•
•
•
Ouvrez la fenêtre d’édition de l’acteur sur lequel vous voulez créer un script d’acteur,
Cliquez sur l’icône script d’acteur (CTRL+’)
la fenêtre de script s’ouvre
Saisissez le script voulu.
Les scripts parents.
Ils permettent de générer des objets enfants.
Un script parents comprend toutes les propriétés et les gestionnaires nécessaires à la gestion des objets enfants (Voir chapitre
sur la programmation orientée objet).
Programmation évènementielle et hiérarchie des messages.
Lingo est un langage de programmation événementielle. Cela veut dire que la programmation se fait en fonction d’évènements
prédéfinis. Fini le temps ou le développeur écrivait des programmes de plusieurs centaines de lignes d’affilée dans lesquelles il
devait prévoir tous les cas de figure.
Dans un outil de programmation événementielle, les concepteurs de l’environnement de développement ont élaboré un cycle
d’événements récurrents. Pour coder son programme, le développeur d’application utilise ce cycle pour positionner son code
organisé sous forme de petits gestionnaires. Lors de l’exécution du programme, ces gestionnaires seront appelés en fonction de
leur positionnement dans le cycle des évènements.
Voici une liste d’événements non exhaustive classés par type de script.
Evènements gérables au niveau des comportements d’image-objet
On beginSprite
Cet événement est appelé chaque fois que la tête de lecture rencontre une nouvelle image-objet.
Il permet de créer les instances de tous les comportements attachés à l’image-objet.
La référence de l’objet est transmise dans le paramètre me.
Cet événement est généré avant l’événement PrepareFrame.
Si la tête de lecture quitte une image-objet pour y revenir plus tard, l’événement BeginSprite sera à
nouveau appelé.
On EndSprite
Cet événement est appelé chaque fois que la tête de lecture quitte une image-objet.
EndSprite est appelé après l’événement ExitFrame.
On MouseEnter
Cet événement est appelé lorsque la souris entre dans la zone de référence d’une image-objet.
L’événement MouseEnter est généralement utilisé pour permuter deux acteurs pour donner un effet de
rollover.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
On MouseLeave
On MouseWithin
On MouseDown
On MouseUp
On MouseUpOutside
On RightMouseDown
On RightMouseUp
On PrepareFrame
On EnterFrame
On ExitFrame
paramètre me.
Cet événement est appelé lorsque la souris quitte la zone de référence d’une image-objet.
L’événement MouseEnter est généralement utilisé pour permuter deux acteurs pour donner un effet de
rollover.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque la souris est sur la zone de référence d’une image-objet.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le bouton gauche de la souris est appuyé.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le bouton gauche de la souris est relâché.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le bouton gauche de la souris est relâché en dehors du rectangle de
l’image-objet.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le bouton droit de la souris est appuyé.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le bouton droit de la souris est relâché.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé avant que l’image ne soit dessinée à l’écran.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le tête de lecture entre dans une image.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Cet événement est appelé lorsque le tête de lecture quitte une image.
Si cet événement est utilisé dans un comportement, la référence de l’objet est transmise dans le
paramètre me.
Evènements gérables au niveau d’un script d’acteur
On MouseEnter
Cet événement est appelé lorsque la souris entre dans la zone de référence d’une image-objet.
L’événement MouseEnter est généralement utilisé pour permuter deux acteurs pour donner un effet de
rollover.
On MouseLeave
Cet événement est appelé lorsque la souris quitte la zone de référence d’une image-objet.
L’événement MouseEnter est généralement utilisé pour permuter deux acteurs pour donner un effet de
rollover.
On MouseWithin
Cet événement est appelé lorsque la souris est sur la zone de référence d’une image-objet.
On MouseDown
Cet événement est appelé lorsque le bouton gauche de la souris est appuyé.
On MouseUp
Cet événement est appelé lorsque le bouton gauche de la souris est relâché.
On MouseUpOutside
Cet événement est appelé lorsque le bouton gauche de la souris est relâché en dehors du rectangle de
l’image-objet.
On RightMouseDown
Cet événement est appelé lorsque le bouton droit de la souris est appuyé.
On RightMouseUp
Cet événement est appelé lorsque le bouton droit de la souris est relâché.
Evènements gérables au niveau d’un script d’image
On PrepareFrame
Cet événement est appelé avant que l’image ne soit dessinée à l’écran.
On EnterFrame
Cet événement est appelé lorsque le tête de lecture entre dans une image.
On ExitFrame
Cet événement est appelé lorsque le tête de lecture quitte une image.
Evènements gérables au niveau des scripts d’animation
On PrepareMovie
Cet événement est appelé une fois dans le cycle de l’application.
Il est appelé en début de programme, juste après le chargement des acteurs, mais avant que la première
image de l’application ne soit affichée.
C’est donc un bon emplacement pour initialiser les variables globales et procéder à des réglages comme la
taille de l’écran ou le nombre de couleurs affichées.
On StartMovie
Cet événement est appelé une fois dans le cycle de l’application.
Il est appelé en début de programme, il intervient après PrepareMovie.
On StopMovie
Cet événement est appelé une fois dans le cycle de l’application.
Il est appelé en fin de programme. C’est l’événement idéal pour libérer les ressources utilisées par
l’application, fermer les fichiers, reconfigurer l’écran correctement…
On idle
Cet événement se produit chaque fois que director n’a plus d’instruction à traiter.
On KeyDown
Cet événement se produit chaque fois qu’une touche du clavier est appuyée.
On KeyUp
Cet événement de produit chaque fois qu’une touche du clavier est relâchée.
Comme vous pouvez le constater, certains événements peuvent être appelés depuis plusieurs types de scripts.
Que se passe-t-il si une image-objet possède un comportement gérant l’événement MouseDown et que l’acteur servant à
l’image-objet a lui aussi un script d’acteur gérant l’événement MouseDown ?
Lequel des deux scripts sera exécuté en premier ?
Pour résoudre ce type de problème, les concepteurs de Director ont défini une hiérarchie dans l’exécution des scripts.
Les messages sont envoyés :
1- Aux comportements associés aux images-objets
2- Au script d’acteur des images-objets
3- Au comportement associé à l’image courante
4- Aux scripts d‘animation
Lorsqu’un message est intercepté par un script, director exécute le script. Le message n’est pas transmis aux scripts situés plus
loin dans la hiérarchie.
Si l’on veut forcer director à poursuivre dans la hiérarchie, il faut utiliser la commande ‘pass’.
Les comportements et la gestion des images objets.
Introduction à la programmation orientée objet.
La programmation orienté objet (POO) permet de définir des variables spéciale appelées propriétés (property) et des
gestionnaires. Quand vous associez un comportement à une image-objet, une instance (copie) de toutes les propriétés du
comportement est crée pour cette image-objet.
Nous allons créer notre premier comportement.
• Ouvrez la fenêtre de script.
• Nommez votre nouveau script ‘bt' (1)
• Cliquez sur l’icône ‘I’. Dans la fenêtre de propriété, vérifiez que le script est bien un comportement (2).
• Dans la fenêtre de script tapez le code suivant :
Property pSprite
On beginSprite me
pSprite = sprite(me.spritenum)
End
•
On mouseEnter me
Put pSprite
end
Dans le fenêtre de dessin vectoriel, créer un bouton et nommez le ‘bouton off’ (3).
Créer trois instance de cet acteur bouton sur la scène et associez leur le comportement ‘bt’
Ouvrez la fenêtre de message
Testez votre application
A chaque fois que la souris survol un bouton, un message, précisant le numéro de la piste de l’image-objet survolée,
apparaît dans la fenêtre de message.
-- (sprite 1)
-- (sprite 3)
-- (sprite 2)
-- (sprite 1)
-- (sprite 1)
-- (sprite 1)
Explication du code
•
•
•
Property pSprite
La commande property permet de définir les propriétés du comportement.
Pour faciliter la lecture du code, prenez l’habitude de nommer les propriétés en commençant par un p minuscule. Ce n’est pas
une règle obligatoire vis à vis de Lingo mais cette convention est utilisée par beaucoup de développeur.
Si plusieurs propriétés doivent être définies, vous pouvez le faire sur la même ligne :
Property pSprite, pSens
On beginSprite me
pSprite = sprite(me.spritenum)
End
Le gestionnaire beginSprite est exécuté, une seule fois, lorsque la tête de lecture rentre sur l’image-objet. Pour le vérifier,
ajoutez la ligne suivante au gestionnaire beginSprite :
put "initialisation" && pSprite
Arrêtez l’animation et relancez la pour tester.
Ce gestionnaire sert à initialiser les propriétés du comportement pour l’image-objet.
Paramètre me
Il sert à passer la référence de l’objet (adresse mémoire) au comportement.
Rappelez vous, quand vous associez un comportement à une image-objet, une instance des propriétés est créé. Le paramètre
me permet à Lingo de faire pointer le comportement vers l’instance des propriétés de l’image-objet.
La propriété spritenum
spritenum est une propriété d’image-objet. Elle contient par défaut le numéro de la piste de l’image-objet.
L’instruction pSprite = sprite(me.spritenum) initialise la propriété pSprite avec la valeur du numéro de la piste de l’imageobjet.
On mouseEnter me
Put pSprite
end
Le gestionnaire mouseEnter n’est appelé que lorsque la souris entre sur l’image-objet associé. Comme vous l’avez vu plus
haut, le paramètre me permet de passer la référence de l’image-objet pour que Lingo puisse
Application : Création d’un comportement pour gérer le rollover sur tous les boutons d’une application.
Objectif : Lorsque la souris survol un bouton, le comportement doit afficher l’acteur correspondant à l’état survoler du bouton.
Lorsque l’utilisateur clic sur le bouton gauche de la souris, le comportement doit afficher l’état cliqué du bouton. Le
comportement doit également gérer l’état normal du bouton.
Les évènements.
BeginSprite va nous permettre d’initialiser les différentes propriétés du comportement.
MouseEnter va nous permettre d’afficher l’état survolé.
MouseDown va nous permettre d’afficher l’état cliqué.
MouseUp va nous permettre de gérer le retour a l’état survolé lorsque l’utilisateur relâche le bouton de la souris.
MouseLeave va nous permettre de gérer le retour à l’état normal du bouton lorsque la souris sort de la zone de référence.
Les propriétés
Pour gérer le rollover sur les boutons, plusieurs technique peuvent être envisagées.
Pour commencer, nous utiliseront le nom des acteurs pour déterminer les acteurs de remplacement. Chaque bouton existe
dans les 3 états (off, survolé, on).
La propriété pName permet de stocker le nom générique du bouton (bt1, bt2).
Les acteurs
Créez deux séries de trois boutons. Chaque série de bouton devra possédez :
• Une version off – ‘bt1 off’
• Une version survol – ‘bt1 survol’
• Une version on – ‘bt1 on’
Le code du comportement rollover
Commencez par créer une distribution spécifique pour stocker les scripts. Nommer la ‘scripts’
Ouvrez la fenêtre de script
Nommez le nouveau script rollover et tapez le code qui suit :
property pName
on BeginSprite me
pName = sprite(me.spritenum).member.name.word[1]
end
on mouseEnter me
sprite(me.spritenum).Member = member(pName && "survol")
end
on mouseDown me
sprite(me.spritenum).member = member(pName && "on")
end
on mouseUp me
sprite(me.spriteNum).member = member(pName && "survol")
on mouseleave me
sprite(me.spritenum).member = member(pName && "off")
end
Explication du code
on BeginSprite me
pName = sprite(me.spritenum).member.name.word[1]
end
pName sert à stocker le premier mot du nom de l’acteur.
L’expression suivante sprite(me.spritenum).member.name.word[1], se lit de la droite vers la gauche.
La propriété name retour le nom de l’acteur utilisé.
La expression word extrait un mot ou un groupe de mot d’une chaîne de caractères. Dans cette exemple, le premier mot du
nom de l’acteur est retourné.
on mouseEnter me
sprite(me.spritenum).Member = member(pName && "survol")
end
Les 4 gestionnaires suivants servent à intervertir l’acteur utilisé par l’image-objet en fonction de l’événement.
La propriété d’image-objet member sert à spécifier l’acteur affiché par une image-objet spécifiée.
Le nom de l’acteur à utiliser est retrouvé en concaténant le contenu de la propriété pName et la terminaison voulue en fonction
de l’événement (‘off’, ‘’survol’ ou ‘on’).
Ce comportement unique est utilisable pour la gestion de tous les boutons d’une application, si la norme de nomage des
boutons est respectée. Si le comportement un utilisée sur un bouton ne possédant pas les trois acteurs correctement nommés,
une erreur de script est générée.
Des comportements pour modifier les propriétés des images objets.
Dans l’exercice qui suit noue allons créer une télécommande permettant de déplacer une image sur la scène.
Ouvrez une nouvelle animation director.
Importer une image dans la distribution (Fichier – importer ou Ctrl+r).
Poser l’image sur la scène.
Créer un acteur flèche. Nommez le ‘flèche off’.
Créez l’état de la flèche pour le rollover.
Créer quatre image-objets à partir de l’acteur flèche. Orientez les flèches dans les quatre direction en utilisant l’outils de
rotation.
Créez un comportement de rollover pour les image-objets flèches.
Testez votre application.
Pour gérer le déplacement de l’image-objet 1 en fonction des clics de l’utilisateur sur les flèches il existe plusieurs solutions :
• Créer 4 gestionnaires différents, un par flèche. Cette solution n’est pas très
• Créer un gestionnaire unique affecté aux quatre image-objets. Dans ce cas, le gestionnaire doit pourvoir identifier
l’image-objet sur laquelle l’utilisateur clic pour déterminer le sens du déplacement.
Une solution simple consiste à repérer l’image-objet et faire un test.
On mousedown me
Case sprite(me.spritenum) of
2: -- gauche
3: -- droite
4: -- haut
5: -- bas
end case
end
Les curseurs
Bibliothèque de curseur de director
Director possède sa propre bibliothèque de curseurs. Ces curseurs sont utilisables à l’aide de l’inspecteur de comportement.
Voici le code Lingo générer :
on MouseEnter
Cursor 280
End
Curseur personnalisés
Il est possible de définir ces propres curseurs.
Un curseur personnalisé est un acteur bitmap répondant à certains impératifs :
• Il doit faire 16*16 pixels au maximum
• Il doit s’agir d’un acteur 1 bit
L’inspecteur de comportement ne permet pas de sélectionner un curseur personnalisé. Il faut modifier le code Lingo
directement dans la fenêtre de script.
on MouseEnter
Cursor (member “Nom de l’acteur 1 bit”)
End
Le point chaud du curseur correspond au point d’alignement de l’acteur utilisé.
Curseur animés
Un curseur animé utilise un ou plusieurs bitmaps répondant à certain impératif :
• Ils doivent faire 32*32 pixels au maximum (16*16 sur mac)
• Il doit s’agir d’acteur 8 bits.
Pour créer un curseur en couleur ou animé, il faut utiliser l’xtra curseur.
Insertion/Elément de média/Curseur
1.
2.
3.
4.
Choix du bitmap à utiliser
Ajouter le bitmap au curseur
La position du point chaud du curseur doit préciser en pixel à partir du coin supérieur gauche
Visualisation du résultat. Le bouton aperçu permet de tester le curseur.
Exercice : Créer une nouvelle animation comportant trois bouton différents.
Utiliser un script de boucle pour attendre le choix de l’utilisateur.
Créer un changement de curseur en utilisant un curseur de la bibliothèque, un curseur personnalisé et un curseur animé.
Rollover
Un rollover consiste à permuter l’acteur d’une zone sensible (bouton par exemple) avec un autre acteur pour signaler la zone à
l’utilisateur.
Pour créer un rollover utiliser l’inspecteur de comportement en sélectionnant l’action associée aux images objets : ‘Changer
d’acteur’.
Un acteur boucle ou un gif animé peuvent être utiliser sur un rollover. L’animation crée alors un effet encore plus saisissant.
Exercice : Créer une nouvelle animation comportant trois bouton différents (Rouge, vert, bleu) et les comportements associés.
Utiliser un script de boucle pour attendre le choix de l’utilisateur.
Créer trois comportements pour gérer le changement de curseur et le rollover.
Créer un comportement pour le retour au menu.
Exercice : Modifier les acteurs de remplacement en utilisant des gif animés.
Exercice : Modifier les acteurs de remplacement en utilisant des acteurs boucles.