Bonjour,
Dans le cadre d'une animation Flash parent (notée fParent) imbriquant une animation Flash enfant (notée fEnfant), je souhaite passer une variable / un paramètre de fParent à fEnfant.
L'utilisation de "FlashVars" n'est pas efficace dans ce cas : FlashVars permet de spécifier des paramètres "externes" à passer à une animation Flash ; à ma connaissance, FlashVars n'est exploité qu'au sein d'une section Objet (avec Embed) incorporant une animation Flash dans une page ou une section de page HTML.
Un approfondissement de la documentation m'a conduit à essayer trois voies :
1- Le passage de paramètre par méthode CGI (GET / POST) :
Elle consiste en un chargement de paramètres par spécification directe au moment de l'appel. Par exemple :
où [méthode] correspond à la méthode GET ou POST, et où myMC est un objet MovieClip de l'animation fParent englobant fEnfant. Dans ce cas-ci, la méthode GET est (la seule ?) pertinente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part myMC.loadMovie("fEnfant.swf?parametre1=valeur1", [méthode]);
La tentative de chargement de l'animation fEnfant échoue. L'erreur indique que l'animation "fEnfant.swf?parametre1=valeur1" n'est pas localisée - résultat non surprenant compte tenu du nom d'appel considéré dans son intégralité.
2- L'invocation de méthode distante.
Elle consiste à charger une animation Flash fEnfant distante (habituellement) et à manipuler les attributs et les méthodes de fEnfant depuis l'animation Flash appelante fParent. Concrètement on part par exemple du code suivant :
Chez fEnfant :
Chez fParent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var uneVariable:String = "variable de fEnfant"; function uneFonction() { /* ... */ }
L'essai n'est pas concluant : la variable "uneVariable" au sein de fParent est "vide" ; l'appel de la méthode "uneFonction()" n'a aucun effet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 myMC.loadMovie("fEnfant.swf"); myMC.uneVariable = "changement de contenu de la variable de fEnfant"; myMC.uneFonction();
3- La communication de données par canal, avec LocalConnection.
Elle consiste en l'initialisation d'un canal d'émission et d'un canal de réception. Concrètement, cela peut se traduire par le code suivant :
Du côté de fParent, émetteur :
où nomDuCanal est le nom du canal commun à l'émetteur et au récepteur, uneMethode est une méthode définie du côté du récepteur et unArgument est une variable servant d'argument pour ladite méthode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var canalEmetteur:LocalConnection = new LocalConnection(); canalEmetteur.send("nomDuCanal", "uneMethode", unArgument);
Du côté de fEnfant, récepteur :
Cette tentative n'est pas satisfaisante : le nom du canal commun doit être "connu" à l'avance ; or, dans le cas d'application, l'intérêt est de charger depuis fParent plusieurs instances de fEnfant MAIS avec des paramètres différents ; le caractère "statique" du nom empêche cette multiplicité d'instance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var canalRecepteur:LocalConnection = new LocalConnection(); canalRecepteur.uneMethode = function(premierArgument:String) { /* ... */ }; canalRecepteur.connect("nomDuCanal");
D'une manière générale, je cherche à faire passer une variable ou une série de variables à une animation Flash fEnfant chargée au sein d'une animation Flash fParent. Je précise que, au-delà de la documentation, une recherche sur les posts de ce forum (par ailleurs fort remarquable) n'a pas abouti. Les résultats concernaient au mieux la résolution de problème de passage de paramètre d'une application tierce à une animation Flash.
Merci pour votre attention et vos suggestions.
Cordialement,
nha de Lyon.
Partager