Je vais d'abord vous présenter l'ancienne technique, car elle vous permettra de mieux comprendre les différents mécanismes.
Mettons-nous en situation
On va prendre la situation la plus simple possible.

Supposons que vous souhaitez afficher la progression d'un projet avec un petit graphique en Flash.
On pourrait passer directement les données à l'animation, comme nous l'avons fait dans
Transmission des variables. Mais nous allons utiliser la technique inverse : c'est l'animation qui va aller chercher elle-même les informations qui l'intéressent !
On va déjà créer une petite animation toute bête, avec 4 barres colorées qui vont représenter la progression de votre projet dans 4 domaines différents. On donnera comme
nom d'occurrence :
barre_1,
barre_2,
barre_3 et
barre_4.
En haut de votre graphique, vous pouvez rajouter un champ de texte dynamique de
variable :
titre
.
Les variables à charger
Flash va charger 5 variables : la progression pour les 4 barres, et le titre du graphique.
On va donc enregistrer ces variables dans un fichier texte, et on va encoder ces variables au format
urlencode, comme nous l'avions déjà fait quand nous passions directement les variables à l'animation.
Créez donc un fichier
graphique.txt :
Citation : graphique.txttitre=Mon+graph&barre_1=50&barre_2=75&barre_3=15&barre_4=89
N'oubliez pas d'enregistrer votre fichier texte au format UTF-8. Dans le Bloc-Notes, par exemple, il faut faire
Fichier-> Enregistrez Sous -> Codage -> UTF-8.
Pensez tout de même à utiliser un éditeur de texte plus avancé que le Bloc-notes, car il existe plusieurs façons d'enregistrer un fichier en UTF-8, et celle du Bloc-notes est mal supportée par PHP. (En fait, PHP n'aime pas la signature unicode BOM utilisée d'office par le Bloc-Notes.)
Grâce à l'UTF-8, vous n'aurez pas de problème avec les accents et caractères spéciaux, vous pourriez même mettre du chinois mandarin dans le titre de votre graphique.
Ai-je besoin de rappeler que si vous mettez votre animation en ligne, il faudra penser au crossdomain.xml pour pouvoir charger des variables ?
Du côté d'ActionScript
Maintenant qu'on a toutes les ressources nécessaires, reprenons notre animation, et passons à l'ActionScript.
La fonction
loadVariables(url:String, target:Object); permet de charger les variables d'un fichier externe dans un objet.
Nous allons donc devoir créer un clip, qui va être chargé de recevoir les variables que nous allons charger, car les variables portant le même nom que des objets sur la scène, il y aurait un risque à les charger directement dans
_root.
Ça commence donc comme ça :
Code : Actionscript | this.createEmptyMovieClip("variables", this.getNextHighestDepth());
loadVariables("graphique.txt", variables);
|
Ensuite, il ne reste plus qu'à faire correspondre les variables :
Code : Actionscript | _root.titre=variables.titre;
for (var i=1;i<=4;i++) {
_root['barre_'+i]._yscale = variables['barre_'+i];
}
|
Histoire de ne pas devoir écrire 4 fois
barre_1._yscale = variables.barre_1, j'ai fait une petite boucle qui va le faire pour moi.
Maintenant, testons l'animation.

Pourquoi ça ne marche pas ?
Parce qu'on a oublié un "détail" gênant. On essaye d'utiliser des variables qui ne sont pas encore nécessairement chargées ! En effet, le temps de charger le fichier
graphique.txt, Flash a déjà exécuté le code pour faire correspondre les variables...
Nous allons donc devoir attendre que toutes les variables soient chargées avant de les faire correspondre. Pour cela, nous allons exécuter à chaque image un script qui vérifiera que la dernière variable du fichier texte (
barre_4) est bien chargée. Le cas échéant, on fait correspondre les variables et on arrête le code.
Allez, je vous ai tout dit : à vous de bosser, maintenant !
Secret (cliquez pour afficher)Code : Actionscript | this.createEmptyMovieClip("variables", this.getNextHighestDepth());
loadVariables("graphique.txt", variables);
variables.onEnterFrame = function() { // On se place directement dans "variables"
if (this.barre_4) { // Si barre_4 est défini
_root.titre = this.titre; // On est dans "variables", "this.titre" correspond à ce qui a été chargé du fichier texte
for (var i = 1; i<=4; i++) {
_root['barre_'+i]._yscale = this['barre_'+i];
}
delete this.onEnterFrame; // Fait la même chose que "this.onEnterFrame = null;"
}
};
|
Et maintenant, tout fonctionne parfaitement ! Vous pouvez même vérifier que les caractères accentués passent bien dans le titre.
Avantages et inconvénients
Cette méthode possède l'avantage d'être rapide à mettre en oeuvre au niveau du code. Par contre, elle n'est pas très propre, car elle fait appel à un
onEnterFrame. Et dans une grosse animation, l'accumulation de ce genre de méthodes peut rendre l'application très lourde.
Nous allons donc passer à une méthode plus belle

(comme quoi la programmation n'est qu'une affaire d'esthétique

).