La situation est simple :

  • Un MovieClip appelé «test» qui contient un champs de texte dynamique appelé «txt», qui contient comme texte par défaut «coucou».
  • Placez ce MovieClip sur la scène, placez au dessus de lui un calque de masque.
  • Appliquez une transition de forme sur ce masque. Wouai, trop cooool!!!
  • Placez le code suivant sur la 1ère image clé.

var tf1:TextField = (getChildByName("test1"as MovieClip).getChildByName("txt"as TextField;
trace("tf1.text :: " + tf1.text);
tf1.text = "test 1";
trace("tf.text :: " + tf1.text);
  • Compilez!

Magie, le deuxième trace retourne bien la valeur passé au champs de texte, par contre dans le swf on ne voit pas de changement?!

Après de minutieuses analyses, j'ai peux déclarer que : «A chaque image clé contenu dans la transition du masque, l'instance du MovieClip sur laquelle s'applique le masque est réinitialisée»!!!

Pour illustré cette découverte, un petit swf/fla qui contient 3 instances du MovieClip, le 1er n'est pas masqué, le 2e l'est via un calque de masque, le 3e l'est par un MovieClip qui lui est défini comme «mask» via actionscript. Les interpolations sont composé de 3 images clés, «start», «middle», «return». On peut voir que les modifications sont appliqué à tout le monde jusqu'à l'image clé «middle» qui va réinitialiser le champs 2.

Et en bonus un petit zip pour les curieux. :)

Vive Flash, vive l'IDE et vive Adobe!

[MAJ] - Suite aux commentaires de Sly et JeanPhi

Il semble que ça ne soit pas le fait de passer par de l'actionscript pour lier le masque qui règle le problème. Mais bien le fait d'utiliser un Shape comme masque.
Donc pour régler le problème, il suffit de convertir le Shape en MovieClip. :)