Fait étrange avec un TextField et une class de document

Posted on 01/03/2008 · Posted in Flash

Pour un projet, j’ai eu à travailler avec une class de document et des TextField. Je suis tombé sur un étrange problème.

Mise en situation :
– Créer un fichier Flash AS 3 (monFlash.fla), et un fichier AS 3 (MonDocument.as)
– Faite de MonDocument.as la classe de document de monFlash.fla
– Rajouter une image clé à cette animation
– Sur chacune des deux images, placer un TextField dynamique de nom d’occurrence “monText”
– Passons maintenant à MonDocument.as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package
{
        import flash.display.MovieClip;
        import flash.text.TextField;

        public class MonDocument extends MovieClip
        {
                public function MonDocument ()
                {
                        stop ();
                        trace (this.numChildren);       //affiche: 1
                        trace (getChildAt (0));         //affiche: [object TextField]
                        nextFrame ();
                        trace (this.numChildren);       //affiche: 1
                        trace (getChildAt (0));         //affiche: null
                        trace (typeof (getChildAt (0)));        //affiche: object
                }
        }
}

On remarque que sur l’image 1, on a un objet de type TextField, ce qui est parfaitement normal.
Passons à l’image suivante avec nextFrame ().
Nous avons toujours un objet sur scène, mais quand on regarde d’un peu plus près, on s’aperçoit que c’est un objet qui n’a pas été déclaré (trace retourne null…).
En allant plus loin, on veut connaître le type de cet objet, et on voit qu’il s’agit d’un object, et non d’un TextField… Bon certes tout est object, mais quand même, cela est très étrange.

On peut essayer de déclarer nous même notre TextField en décochant l’option “Déclarer automatiquement les occurrences de scène” dans “Fichier -> Paramètre de publication -> onglet Flash -> Paramètre” (ou Maj + shift + F12 ), mais cela ne change rien… C’est exactement le même problème.

Édit : Une explication et une solution au problème a été écrit en commentaire.