Instanciation dynamique

Quand on parle d’affichage dynamique, il s’agit d’ajout d’objets, à la liste d’affichage d’objets, par le biais du code tout en sachant qu’au départ ces objets sont tous instanciés avec le même nom. Par exemple :
for(var i:Number = 0 ; i < 20 ; ++i){
var unObjet:TypeObjet = new TypeObjet([...]);
this.addChild(unObjet);
}
Dans cet exemple sont affiché 20 objets, tous instanciés au départ grâce à la variable « unObjet » du type « TypeObjet » (ce type correspondant par exemple à une classe que vous avez créé).
Revenons à notre problématique. Comment puis-je, par exemple, faire aller de 10 pixels vers la droite (sur l’axe x) l’objet que l’on aura affiché en 7ème et faire aller de 20 pixel vers le bas (sur l’axe y) l’objet que l’on aura affiché en 13ème ? Voici un exemple, qui vous permettra de comprendre comment récupérer les objets qui nous intéresse (attention ceci n’est qu’un exemple et je donnerais d’autres pistes un peu plus bas) :
for(var i:Number = 0 ; i < 20 ; ++i){
var unObjet:TypeObjet = new TypeObjet([...]);
unObjet.name = "myObject"+i;
this.addChild(unObjet);
}
var o7:TypeObjet;
var o13:TypeObjet;
o7 = this.getChildByName("myObject6");
o13 = this.getChildByName("myObject12");
o7.x += 10;
o13.y += 20;
Pour explication :
Dans la boucle for, vous noterez l’apparition d’une ligne qui permet de spécifier un nom à votre objet (propriété .name). Si vous ne spécifiez pas ce nom, Flash s’en chargera à votre place mais lui donnera un nom que vous ne pourrez pas utiliser parce que vous ne le connaîtrez pas.
Ensuite, vous noterez l’utilisation de la fonction getChildByName();. Cette fonction renvoie l’objet dont le nom est spécifié en paramètre. Vous remarquerez que l’on spécifie le conteneur dans lequel on recherche l’objet (le conteneur est « this » dans cet exemple). Enfin, pourquoi utiliser myObject6 et myObject12 pour obtenir les objets affichés en 7ème et en 13ème ? Tout simplement parce qu’on commence la numérotation par 0 et que, par conséquent myObject0 est le 1er à s’afficher. Donc myObject6 est le 7ème à s’afficher. Idem pour myObject12.
Pour information :
J’ai codé l’exemple ci-dessus de manière à ce qu’il soit le plus décomposé possible. En réalité, ce serait mieux de le codé ainsi :
for(var i:Number = 0 ; i < 20 ; ++i){
var unObjet:TypeObjet = new TypeObjet([...]);
unObjet.name = "myObject"+i;
this.addChild(unObjet);
}
this.getChildByName("myObject6").x += 10;
this.getChildByName("myObject12").y += 20;
Pour aller plus loin :
Récupérer un objet grâce à son nom est une des méthodes permises par l’AS3. Une autre que j’utilise régulièrement est la fonction getChildAt();. Cette fonction vous permet de récupérer un objet à un index spécifié. Notez que vous pouvez récupérer l’index d’un objet grâce à la fonction getChildIndex();, que vous pouvez ajoutez un objet enfant à un index précis grâce à la fonction addChildAt(); et enfin que vous pouvez modifier cet index grâce à setChildIndex();. Toutes ces fonctions sont a utilisés depuis l’objet parent.
Nous reviendrons sur ces fonctions dans un autre article sur les index.
Bon codage à tous !

















