Puce et Média

Recherche et développement en multimédia

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille
Puce et Média > Flash plate-forme > Action Script 1.0 et 2.0 > Les bases d'ActionScript - Part II - Les variables

Les bases d'ActionScript - Part II - Les variables

Envoyer Imprimer PDF

Rôle et principe des variables

Une variable est un conteneur d'information. Tout types d'informations peut être stocké dans une variable. Généralement cette information est volatile et doit peut être modifiée à tout moment et par divers types d'actions, qu'il s'agisse de l'utilisateur, de l'application, du système d'exploitation, ou de l'interactions de divers autres objets entre eux... Dans sa forme pla plus primitive de Flash et d'ActionScript, une variable se présente sous la forme d'une équation avec à gauche le nom de la variable et à droite sa valeur.

jour = 8
mois = "mars"

Propriétés ou variables d'instances

En programmation, on parle également de propriétés. Les propriétés d'un objet. Il s'agit également d'une variable d'instance. Donc il est possible de dire que les deux termes sont équivalents bien que suivant les ouvrages, ou les littératures, on retrouve tantôt un terme , t'antôt un autre... et même tantôt les deux. Le plus simple pour démontrer que les deux termes peuvent représenter la même chose dans Flash et de se dire qu'une animation contient des variables et qu'un MovieClip des propriétés. Mais bon la TimeLine principale n'est également qu'un Clip... donc.... euh.... ne nous prenons pas la tête et appelons des variables, tout conteneur que nous allons utiliser temporairement pour stocker des résultats intermédiaures de calcul, et propriétés tout ce qui nous permettra de stocker des informations propre à des objets particliers quelqu'ils soient.

Portée d'une variable

Les variables locales

Avant AS3.0 il est possible d'utiliser le mot clé var pour déclarer une variable locale, ou de ne pas l'utiliser pour augmenter la portée de cette variable. Depuis AS3.0 nous n'avons plus le choix il faut user de var pour initialiser une variable. Laissons AS3.0 de coté et voyons voir ce qu'il en est... de l'utilisation ou de la non utilisation de var. Créez une animation Flash et ouvrez une Action - Image :

uneDonnee = 1
test = function(){
uneDonnee = 0
// var uneDonnee = 0
}
test()
trace(uneDonnee)

Dans le premier cas, si nous n'utilisons pas le mot clé var, la fenêtre de sortie affiche 0. En fait, la variable uneDonnee est commune et partage le même emplacement dans la mémoire, donc l'une affecte l'autre, ce qui parait jusque là normal. Maintenant, inverser le commentaire afin d'utiliser le mot clé var à l'intérieur de la fonction, puis relancez l'animation. Cette fois ci, la fenêtre de sortie affiche 1. Cela est du que la seconde variable uneDonnee est déclarée comme locale à la fonction et ne pointe donc pas sur le même emplacement que la première variable uneDonnee, celle qui est en dehors de la fonction.

Faisons, une autre expérience tout autant parlante pour mettre en évidence l'apsect local de la création d'une variable au travers du mot clé var. Créez une nouvelle animation Flash, et dans une fenêtre d'Action - Image, créez une variable sans l'utilisation du mot clé, testez l'aniamation :

function test(){
uneDonnee = 1
}
test()

Une fois l'animation lancée, appelez le listage des variables depuis le debogeur, Ctrl - Alt - V. Dans la fenêtre de sortie vous pouvez voir apparaître la variable uneDonnee avec pour valeur 1.

Recommencez l'expérience mais avec cette fois ci l'utilisation du mot clé var

function test(){
var uneDonnee = 1
}
test()

Une fois l'animation lancée, appelez à nouveau le listage des variables, et vous constaterez que le player ne connait pas de variable uneDonnee.

Depuis AS3.0

En AS3.0 les variables sont déclarées en usant du mot clé var et doivent être typée. Bon, si elles ne le sont pas ni le compilateur ni le player ne s'en plaindra, et vous pourrez alterner la nature du contenu de la varibale, ouvrez une animation Flash AS3.0, ouvrer la fenêtre de code et tapez :

var test = 5;
test = "coucou"
trace(test)

La fenêtre de sortie affiche bien "coucou". Donc, et bien que cela soit fortement recommandé, il est possible de ne pas typer les variables. Pour typer une variable, il suffit de préciser le type juste après sa déclaration :

var test:Number = 5
var autre_test:String = "coucou"
autre_test = test

Si vous lancez le compilateur, il va complaindre en vous lançant le message d'erreur suivant:

1067: Contrainte implicite d'une valeur du type Number vers un type sans rapport String.

Il existe autant de type de décalaration qu'il existe de type d'objet accessible par le langage ActionScript. Nous verrons que nous pouvons également créer nos propres type d'objet en créant des classes qui porteront le même nom. Par exemple, si nous créons et appelons la classe un-type_personnel, les instances issues de cette classe seront de type un_type_personnel :

var un_objet:un_type_personnel = new un_type_personnel()

Les variables globales

Bien que toute variables puissent être généralisée en la plaçant sur la racine, _root.uneDonnee, il existe le mot clé _global, qui permet de rendre une variable globale à l'ensemble de l'animation. De ce fait une fois déclarée, cette variable sera accéssible de toute part sans chemin de cible, sauf si une variable au même nom locale intervient. Voir l'exemple ci dessous :

_global.uneDonnee = 0;
function test_1() {
uneDonnee = 1;
}
test_1();
trace(uneDonnee); // 1
function test_2() {
var uneDonnee = 2;
}
test_2();
trace(uneDonnee); // 1

Le _root

Comme nous l'avons abordé lors de l'exploration du chemin de cible, l'adresse absolu se compose toujours à partir de la racine de l'animation, c'est à dire _root. Par contre nous allons rencontrer une ambiguité de nomage entre l'interpréteur Flash et celui du player. Le plus simple pour le mettre en évidence reste de tracer le _root. Donc créez une animation et dans une Action - Image tapez :

trace(_root);

Une fois que vous lancez l'animation, la fenêtre de sortie affiche _level0. Il s'agit du premier niveau dans lequel le player lance les animations. Il peut y avoir autant de niveau que souhaité. Donc dans ce cas là _root est équivament à _level0. Là où les choses se corsent c'est si nous sommes amené à charger une animation dans une autre. Il y a deux cas de figures, soit on charge l'animation hébergé dans un autre niveau, par exemple en _level100, soit on charge l'animation dans un clip de la première.

Chargé dans un niveau

Dans ce cas là, le _root de l'animation chargé équivaut à _level100 et surtout toute les variables de cette animation défini en adresses absolues, donc utilisant _root, restent préservées et continu de fonctionner corrrectement.

Chargé dans un clip

Cette fois ci, le player considère que l'animation chargée devient partie intégrante de l'animation hôte et donc le _root de l'animation chargée équivaut à _levl0. De plus, toutes les variables utilisant _root dans leur chemin de cible localiseront leur recherche sur l'animation hôte et plus sur l'animation où elle sont censées se trouver.

Mise en évidence

Pour le mettre en évidence, construisons deux animations Flash, une animation hôte et une animation chargée. L'animation hôte contient un clip vide appelé 'cnt' et deux boutons appelés respectivement 'bt_niveau' et 'bt_clip'. Sur le calque Action - Image, plaçons le code suivant :

 

 

Le typage des variables

Déclaration d'une variable

Supression d'une variable

Le transtypage

Opération entre variable

Concaténation

Opération alégbrique

Evaluation d'une variable

Affectation dynamique d'une variable

Les propriétés ou variables d'instances

 

 


Puce et Média > Flash plate-forme > Action Script 1.0 et 2.0 > Les bases d'ActionScript - Part II - Les variables