IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

[AS3] Modification d'un texte dans un MovieClip en Dynamic


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 40
    Par défaut [AS3] Modification d'un texte dans un MovieClip en Dynamic
    Bonjour,

    Voilà je débute mon apprentissage de l'action script 3. Et la je cherche à modifier un TextField contenu dans un Movie Clip. J'ai trouvé ça qui me semble correcte, en debug toutes les valeurs correspondent, je n'ai pas d'erreur dans la console mais à l'affichage je n'ai aucun résultat (j'ai encore l'ancien texte et pas le nouveau).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var mc:MovieClip = new MC_Messages();
    TextField(MovieClip(mc).getChildByName("txt_messagee")).text = "Nouveau texte";
    'mc' est mon movie clip et 'txt_message' est le nom de mon objet TextField.

    Merci d'avance .

  2. #2
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    T'es sur qu'il y a deux 'e' à txt_messagee ?

    Sinon voila un code qui me semble plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var mm:MC_Messages = new MC_Messages();
    var tf:TextField = mm.txt_messagee;
    tf.text = 'new Text';

  3. #3
    Membre expérimenté
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Par défaut
    C'est très bizarre ce que tu as écrit...

    avec MovieClip(mc) tu forces le cast de ton MC_Messages en MovieClip, alors que c'est déjà un MovieClip étendu. En ce sens, il serait normal que MovieClip ne dispose pas des propriétés de MC_Messages. Tu ne pourrais alors plus accéder à tes propriétés, dont ton champ texte.

    Ensuite, getChildByName() renvoie un DisplayObject, pas un TextField. Tu n'as donc pas accès à la propriété text de TextField sur le DisplayObject. C'est pourquoi, j'imagine, que tu forces un cast avec le premier TextField(...).

    Mais c'est tout mal branlé... Il semble que tu n'aies pas bien compris les notions de typage objet et particulièrement de la notion d'héritage. Relis en ce sens la documentation de l'AS3.

    Si j'ai bien compris, tu as construit un MovieClip dans lequel tu as mis un champ texte. A ce moment, il faut bien comprendre ceci (j'insiste, mais c'est pour être sûr d'être clair):

    - Les objets de type MovieClip ne contiennent pas de champ texte pas défaut (c'est d'ailleurs pour ça que tu as créé un objet spécifique).
    - En mettant un champ texte dans un clip, tu ajoutes un objet de type TextField dans un objet de type MovieClip.
    - L'objet ainsi obtenu n'est plus véritablement un MovieClip (qui normalement ne contient pas de TextField). L'objet obtenu est une extension de MovieClip, un nouveau type objet, qui ici est nommé MC_Messages.
    - Le type d'objet MC_Messages est donc une extension de MovieClip, et contient une propriété spécifique nommée "txt_message" de type TextField.

    L'objet "mc" qui instancie le type MC_Messages n'est donc pas de type MovieClip, mais bien de type MC_Messages. Il faut alors écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var mc:MC_Messages = new MC_Messages();
    Evidemment, tu peux typer "mc" en MovieClip (ce que tu as fait), puisque MC_Messages est une extension de MovieClip. Mais à ce moment là, si tu peux accéder à toutes les propriétés de mc en tant que MovieClip, tu ne peux plus du tout accéder aux propriétés de mc en tant que MC_Messages. Et donc tu as toujours accès aux propriétés comme "x", "y", ou à la méthode getChildByName(), mais tu n'as pas plus accès à la propriété "txt_message".

    Pour l'exemple, tu pourrais même typer mc:Object, puisque MovieClip est une extension de Object, mais tu n'aurais plus accès à aucune propriété. Pas même "x" et "y".

    normalement, tu écris tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var mc:MC_Messages = new MC_Messages();
    mc.txt_message.text = "Nouveau Texte";
    Ca devrait fonctionner.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 40
    Par défaut
    Merci beaucoup pour vos réponses surtout David Buff pour tes explications qui m'ont permis de comprendre d'avantage ce système. Et désolé de pas avoir pu répondre plutôt (vacances ).

    Par contre ça ne fonctionne toujours pas.... .

    Pour le texte j'ai bien spécifié un "dynamic Text" les noms des propriétés sont correctes

    En gros ma classe c'est ça, il n'y a toujours pas d'erreur dans la console et le movie clip s'affiche bien mais toujours avec l'ancien texte. Pourtant quand je modifie x et y du MC_Messages ça fonctionne...


    Classe Main relié à mon .fla
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Main extends MovieClip{
     
    <div style="margin-left:40px">public function Main():void {
     
    <div style="margin-left:40px">var d:MC_Messages = new MC_Messages();
    var tf:TextField = d.txt_message;
    tf.text = "new Text";
    d.x = 0;
    d.y = 100;
    addChild(d);	</div>}</div>}
    Je continue à chercher et j'attends vos réponses et idées si vous en avez merci.

    Khrono

  5. #5
    Membre expérimenté
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Par défaut
    Ce dernier code est propre et paraît correcte...

    Je suggère de faire un trace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    trace(tf);
    trace(tf.text);
    pour voir si la propriété est bien récupérée...

    Ne pourrais-tu pas t'être trompé dans:
    - Le nom d'occurrence du TextField
    - Le document Flash est bien en AS3
    - Le TextField est bien dans le clip, et non pas dans un sous-clip dans le clip

    ... essaye de bouger non pas les coordonnées x,y du clip, mais celles du TextField (tf.x) pour voir...

  6. #6
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 40
    Par défaut
    J'ai mis les trace et je récupère bien le nouveau message. Ensuite je me suis m'y en debug et dans l'object mc j'ai bien la propriété txt_message avec MC_Messages comme parent et le texte est correcte.

    J'ai essayé de bouger le texte ça n'a rien fait.

    Pour être sur que le document soit bien en AS3 comment il faut faire ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Main extends MovieClip{
    <div style="margin-left:40px">public function Main():void {
     
    <div style="margin-left:40px">var mc:MC_Messages = new MC_Messages();
    var tf:TextField = mc.txt_message;
    trace(tf.text);
    tf.text = "Nouveau Texte";
    trace(tf.text);
    tf.y = 300;
    mc.x = 0;
    mc.y = 100;
    addChild(mc);	</div>}</div>}

    ps: je suis sur le tchat si ca intéresse

  7. #7
    Membre expérimenté
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Par défaut
    On va y arriver...

    Pour vérifier que tu es bien en AS3:
    Fichier > paramètres de publication > onglet Flash > champ Version d'ActionScript

    Sinon, essaye plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function Main():void {
        var mc:MC_Messages = new MC_Messages();
        addChild(mc);
        trace(mc.txt_message);
        trace(mc.txt_message.text);
        mc.txt_message.text = "Nouveau Texte";
        trace(mc.txt_message.text);
    }
    et poste nous le résultat du trace...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modification d'un texte dans un bouton
    Par atlantis dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 01/04/2008, 14h05
  2. Modification intempestive de texte dans une cellule
    Par Gorfael dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/12/2007, 00h20
  3. modification des variables difine dans un movieclip
    Par 3adoula dans le forum Flash
    Réponses: 1
    Dernier message: 21/08/2006, 18h19
  4. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12
  5. Modification texte dans un fichier
    Par byloute dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 04/10/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo