Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Ceci est une toute petite parenthèse à l'attention de ceux qui viennent de là et vont par là

Objets, méthodes, propriétés, toussa…

Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par Nataly, le 09 juillet 2011

Avant de hisser la grand voile et de mettre le cap sur l'interaction, il nous faut quelques connaissances supplémentaires, surtout en terme de vocabulaire.

Si on veut, à l'occasion du chapitre suivant, s'offrir le plaisir de dépasser la théorie par la pratique et s'amuser de quelques exercices de mise en œuvre - voire de tests de démo - plus question de tergiverser : il faut en passer par des questions de syntaxe, de définition et de vocabulaire.

Rien de magique dans la programmation, tout est toujours justifiable, une ligne d'instruction ce n'est pas un abracadabra performatif, les mots ont un sens et je vous propose de clarifier le vocabulaire courant sans plus attendre.

Une métaphore grammaticale

L'incontournable dès qu'il s'agit d'ActionScript, ce sont les mots Objet, Méthode, Propriété.

Langage pour langage, appuyons nous sur une langue qu'on connait bien : le français.
En français, on sait que pour construire une phrase on utilise un sujet et un verbe au minimum. Il existe aussi des adjectifs.
Les adjectifs qualifient, les verbes expriment l'action.
En actionScript c'est la même chose, on dispose d'objets qui sont des “trucs”1) qui font ou subissent des choses et ont des caractéristiques.

Typiquement :

L'instance (occurrence) d'un symbole MovieClip posée sur la scène est un objet, le sujet des futures phrases que nous écrirons.

Ce clip peut être lu. C'est une action, on parlera de verbe en français, et de méthode en AS

Ce clip est caractérisé - entre autres - par son nom, le nom est une propriété.

Une phrase, pour finir de filer la métaphore, c'est une instruction et elle se termine non pas par un point (comme en langage d'être humain) mais par un point virgule. Ça, vous le savez déjà.

Quelques règles

Autant j'ai du mal dans la vie avec les règlements, autant en développement et grammaire j'adore les règles : ça simplifie la vie
Il suffit de les connaitre et d'appliquer pour que ça marche \o/

Quand on écrit des instructions qui concernent des objets on utilise la syntaxe à points, comprendre : on sépare l'objet de sa propriété ou de sa méthode par un point, toujours.
L'objet est “en premier”, toujours aussi.

On écrira donc :
Objet.Méthode (objet point méthode)
Objet.Propriété (objet point propriété)


Les propriétés

Les propriétés qualifient (je me répète), ce sont des adjectifs qui caractérisent les objets.

On peut donc qualifier un objet, renseigner une de ses caractéristiques, ou interroger quant à sa caractéristique ; dire “la souris est verte” ou interroger “quelle est la couleur de la souris ?”

Pour dire la souris est (de couleur) verte, je vais écrire :
laSouris.couleur=vert;
Ici je fais un beau mélange français/AS en respectant la syntaxe actionScript : je sépare l'objet de sa propriété par un point et je termine la phrase par un point-virgule.
En gros, on parle en petit nègre2).

En conservant ce mode d'expression simplifié, pour interroger “quelle est la couleur de la souris ?” on dirait :
Couleur la souris ?
Et pour répondre on écrirait :
couleurLaSouris=laSouris.couleur;

Ecrire

Rapporté au cas concret d'une occurrence de clip posée sur la scène dont on voudrait “régler” la position horizontale, ça pourrait donner :

leClip.x=100;


Ici, x est une propriété. Elle qualifie la position de l'objet sur l'axe horizontal (abscisse).
En écrivant cette bête ligne dans la fenêtre action de l'image qui porte une occurrence de clip nommée leClip, on place l'occurrence considérée à 100 pixels du bord gauche.

Essayez :)


Il ne reste plus qu'à tester [cmd-Entrée] et à constater que le clip est venu se ranger bien gentiment là où on lui a demandé.
J'en vois sortir le pied à coulisse et râler que non, ça ne semble pas être le cas, pas tout à fait… Et puis d'abord, cette fichue pastille, on en mesure la position par rapport à quel bord ? Elle est circulaire !

:) Eh oui, c'est une bonne question. Quand on parle des coordonnées d'un symbole de bibliothèque c'est le point d'origine qui est pris en considération, et le point d'origine c'est la petite croix que vous voyez quand vous l'éditez :

.

Lire

Lire la propriété d'un objet, c'est interroger ladite propriété et en récupérer la valeur à l'aide d'une variable, qui représentera cette valeur :

var positionX:Number = leClip.x;
trace(positionX);

pas plus ! :-)

Les méthodes

Pour exécuter une action, on applique la méthode à l'objet considéré en respectant la syntaxe (objet point méthode).

Imaginons un clip animé. Prenons une simple interpolation à titre de test. On pose une occurrence du symbole sur la scène, on teste, et l'animation se joue en boucle. Parfait, c'est le principe.
Pour arrêter l'animation, il suffit d'appliquer un stop à l'occurence. Je dis appliquer un stop, c'est une sorte de raccourci de langage courant pour dire invoquer la méthode stop() sur cette occurrence.
On écrira donc :

leClip.stop();

Inversement pour lancer la lecture d'un clip, on a recours à la méthode play().

leClip.play();



Et il existe aussi les méthodes gotoAndStop et gotoAndPlay qui envoient la tête de lecture à une image spécifiée.
gotoAndStop saute à l'image considérée et c'est tout (pas de lecture).
gotoAndPlay démarre la lecture à l'image dite.

//envoie la tête de lecture de l'instance nommée leClip image 6
leClip.gotoAndStop(6);
//envoie la tête de lecture à l'étiquette reprendre
leClip.gotoAndStop("reprendre");
//démarre la lecture de l'instance nommée leClip image 6
leClip.gotoAndPlay(6);
//démarre la lecture à l'étiquette reprendre
leClip.gotoAndPlay("reprendre");


Je parle d'instances de symbole, mais on est bien d'accord que ceci est valable tout pareil pour le tout premier clip auquel on ait à faire : le scénario principal - qu'on appelle la scène par abus de langage (et pour aller vite).
Le .fla, c'est un gros symbole avec ses images et son scénario.

L'objet this

Vous le savez sans doute, si on a fabriqué une animation directement sur “la scène”3) et qu'on souhaite que la lecture s'arrête à la dernière image, on “met un stop” dernière image.
Dans la pratique ça consiste à insérer une image clef dernière image d'un calque dédié4) et à écrire tout bonnement stop(); dans la fenêtre Action de cette image.



Alors quid de cette soit-disant règle objet point méthode ? s'insurge le ronchon de service, là, il n'y a que la méthode stop et ça marche très bien.

Certes, mais c'est un piège, ou une facilité… Les deux va-t-on dire : une facilité piégeante. En effet il se trouve que si on utilise une méthode ou une propriété sans préciser l'objet auquel elle s'applique, à la compilation un objet par défaut est ajouté.
Cet objet c'est this.

En fait on a écrit sans s'en rendre compte :

this.stop();


this vaut l'objet dans lequel on écrit le code. Ici le scénario principal, et quand on écrit dans un clip, le clip en question.

Vérifiez si vous voulez :

this.stop();
trace(this);
[object MainTimeline]


Profitez en pour vérifier qu'ici on est bien sur le scénario principal (MainTimeline) et non sur la scène (stage). Un swf c'est un objet Stage (scène) qui contient un objet unique MainTimeline (scénario principal) qui pourra contenir un ou plusieurs clips…
illustré ici

A retenir :
Quand on n'écrit rien, on écrit this


En route pour la suite

Evidemment il serait plus pratique et plus satisfaisant de pouvoir tester tout ça en déclenchant une action ou une autre au clic sur un bouton, rendre un clip invisible (propriété visible) en cliquant dessus ou en modifier l'opacité (propriété alpha) de façon dynamique…

Vous allez pourvoir vous y essayer dès le chapitre suivant, parce que cette fois on en sait assez pour se lancer dans l'interaction.

1) 'scusez, à ce stade je ne peux pas dire mieux ;)
2) selon l'expression consacrée de colonialisme en vigueur
3) toujours abus de langage
4) ou pas, mais c'est vraiment mieux de réserver un calque au code