Fait étrange avec un TextField et une class de document

Flash Ajouter un commentaire

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.


Vous avez aimé l'article ? Alors vous aimerez surement :
Mots-clefs :,

2 réponses to “Fait étrange avec un TextField et une class de document”

  1. ademus Says:

    avec le code suivant, ça marche; il faut attendre que la scéne ait été mise à jour graphiqueent pour pouvoir accéder à ses éléments graphiques.

    package
    {
    import flash.display.MovieClip;
    import flash.text.TextField;
    import flash.events.Event;
    public class effacer extends MovieClip
    {
    public function effacer()
    {
    stop();
    trace(this.numChildren);//affiche: 1
    trace(getChildAt (0));//affiche: [object TextField]
    nextFrame();
    stage.invalidate();
    addEventListener(Event.RENDER,upToDate);
    }
    public function upToDate(e)
    {
    trace(this.numChildren);//affiche: 1
    trace(getChildAt (0));//affiche: [object TextField]
    trace(typeof (getChildAt (0)));//affiche: object
    }
    }
    }

  2. Thomas Tourlourat Says:

    C’est en effet cela, à l’époque où j’ai écris cet article je n’en avais pas conscience.

    Merci à toi Ademus en tout cas.

    Armetiz.

Ajouter une réponse

Designed by NattyWP Wordpress Themes.
Images by desEXign.