21 mar
2008

Ciblage de clip dynamique via getChildByName

Allé hop un peu d’Action Script 3…

Je vais expliquer brièvement comment accéder aux propriétés / méthodes d’une classe via le ciblage dynamique grâce à la méthode getChildByName()… car j’ai regardé sur beaucoup de forums pour savoir comment faire et j’ai finalement trouvé en tombant sur un début de piste…

Mise en situation :

  • on dispose d’un clip que créé graphiquement
  • on crée la liaison en l’exportant pour Action Script (ce qui génère une classe que l’on nommera “maClasse”, extention de la classe MovieClip)
  • on souhaite créer dynamiquement des instances de maClasse ET créer dynamiquement une instance d’objet TextField à l’intérieur de ces premières

Fonction qui génère ce que l’on veut dans la mise en situation:

function creerClip(i:int){
var monClip:maClasse= new maClasse();// Création du clip
monClip.name = 'monClip'+i;// nomination du clip dynamique, on aura des noms de la forme monClip1, monClip2...
addChild(monClip);// on ajoute le MovieClip à liste d'affichage
var monTexte:TextField = new TextField(); // Création du texte dans le clip
monTexte.name = 'monTexte'+i;// nomination du clip dynamique, on aura des noms de la forme monTexte1, monTexte...
monClip.addChild(monTexte);// on ajoute le TexteField à la liste 'affichage et on l'associe auxinstances demonClip
}

creerClip(1);// crée une instance monClip de la classe maClasse dont le name vaut monClip1 ET crée une instance monTexte de la classe TextField dont le name vaut monTexte1

Comment faire

Par la suite il est préférable d’avoir une classe avec un constructeur plutôt qu’une fonction mais c’est pour l’exemple. Bref, le décors étant planté, ce que l’on veux c’est accéder à la propriété monText1.txt afin de la modifier. Logiquement on devrait faire :

monClip1.monText1.text = "texte que l'on veut";

Mais cela ne marche pas, pour y parvenir, il faut utiliser la méthode getChildByName(), voici des exemples d’utilisation pour bien comprendre comment cela marche :

  • getChildByName(monClip1) renvoie un objet de type maClasse
  • getChildByName(monClip1).name renvoie une chaine de caractères “monClip1″
  • getChildByName(monClip1).numChildren renvoie une erreur à la place d’indiquer le nombre d’enfants (qui devrait être d’1, il s’agit de monText1 associé à monClip1 via monClip.addChild(monTexte))

Pour obtenir effectivement numChildren, il ne faut pas oublier de faire ce qu’on appelle du cast d’objet, il faut écrire :
MovieClip(getChildByName(monClip1)).numChildren;

Par extension, pour obtenir la propriété txt monClip1.monText1.text, il faudra utiliser la syntaxe suivante :
TextField(MovieClip(getChildByName(monClip1)).getChildByName(monText1)).text = "texte que l'on veut";

Et plus généralement pour obtenir une propriété / méthode d’une instance de classe crée dynamiquement :
Accès à la propriété d’une instance de la classe nomDeLaClasse…
nomDeLaClasse(getChildByName(propriété name de l'instance de nomDeLaClasse)).propriété;
Accès à la propriété d’une instance de la classe nomDeLaClasse2 enfante d’une instance de la classe nomDeLaClasse1…
nomDeLaClasse2(nomDeLaClasse1(getChildByName(propriété name de l'instance de nomDeLaClasse1)).getChildByName(propriété name de l'instance de nomDeLaClasse2)).propriété de la classe nomDeLaClasse2;
etc…

J’espère que les explications ne sont pas trop fouillis… si vous avez des questions n’hésitez pas! Bon flash à tous :)

Prenez un café et consultez les articles traitant du même sujet

Ajoutez cet article à votre Bookmark favoris

delicious blogmarks digg scoopeo fuzz tapemoi nuouz blogmemes

4 commentaires pour “Ciblage de clip dynamique via getChildByName”

  1. Publicité
  2. molokoloco le 23 mars 2008 à 15:03

    Hello,

    Je tombe sur cet article et je suis moi même en train de me mettre doucement à l’AS3…
    Ça m’a l’air de partir dans tous les sens pour faire des choses simple…
    Idem je viens d’apprendre à faire un simple lien en 10 lignes o_O … sic

    Un très bon site pour les tutos.. http://www.yazo.net

    Tchuss et bon courage ;)

  3. cedric le 23 mars 2008 à 18:44

    hello molokoloco,
    Tout d’abord merci pour ce lien, j’ai trouvé pas mal de petits blogs pour apprendre l’AS3, je ferai un article dessus.

    Concernant l’AS3 lui-même, il y a des choses qui semblent assez complexes mais qui existent pourtant dans tous les langages de programmation (le cast d’objet existe dans d’autres langages orientés objets) et qui surtout permettent de faire ce qu’on ne pouvait pas faire avant. De plus l’AS3 est bien plus orienté objet que l’AS2 qui relevait un peu de la bidouille…

    Bref ça parrait plus compliqué quand on commence car on a ses habitudes AS1 / AS2 mais quand on comprend comment cela marche je trouve que c’est plus simple par la suite…

    Bon courage à toi aussi ;)

  4. Shin le 6 mai 2008 à 17:37

    Hello,
    Après plusieurs heures d’arrachage de cheveux, ton article m’a sauvé d’une calvitie certaine.
    Alors MERCI, MERCI et MERCI.
    En fait, je voulais créer dynamiquement des “Sprite” dans lesquels j’ajoute un “MovieClip”, puis accéder à la méthode addChild de ces “MovieClip” via une fonction. Bien sûr, chaque “Sprite” et chaque “MovieClip” a un nom créé dynamiquement lui aussi.
    Maintenant, grâce au cast d’objet, ça va tout seul.
    Encore une fois MERCI.

    Ce qui est bizarre, c’est qu’on arrive à accéder au propriétés “x” et “y” sans faire un cast d’objet.

  5. cedric le 6 mai 2008 à 19:26

    Salut Shin,
    Ravi d’avoir pu t’aider! Et ravi également que ce qu e j’ai écrit puisse être déchiffré ;)

    Bonne continuation à toi en tout cas!

Exprimez-vous en rédigeant un commentaire