ActionScript 3.0, l'essentiel sous la main Adobe Flash Accueil
Fiches
Boutique
Contact
Création dynamique d'occurences de clip avec des paramètres
L'un des premiers problèmes que j'ai eu avec l'AS3, c'est de pouvoir accéder à des clips que j'avais crée à la chaine à l'aide d'une boucle. Mon problème était qu'en AS3, on ne peut plus incrémenter un nom de variable. Impossible donc d'accéder à monClip1, monClip2, monClip3, etc. ils s'appelent tous monClip.

Ma première solution consiste à enregistrer dans chaque occurence toutes les variables dont vous allez avoir besoin. On pourra ainsi y accéder facilement par l'intermédiaire d'une action à la souris (quand on clique dessus par exemple). Ainsi, chaque occurence garde des paramètres qui lui sont propre.

function clic_sur_occurence(e:MouseEvent):void
{
//Accéder aux propriétés de l'occurence
e.target.name;
e.target.x;
e.target.rotation;
e.target.scaleY;
e.target.alpha;
e.target.visible;

//Accéder aux variables de l'occurence
e.target.maVariable1;
e.target.maVariable2;
e.target.maVariable3;
}

//Création de 10 "puce"
for(var i=0; i<10; i++)
{
var p:MovieClip = new puce(); //Création d'une nouvelle puce sur la base du clip "puce" présent dans la bibliothèque
p.maVariable1 = 8;
p.maVariable2 = "abc";
p.maVariable3 = false;

addChild(p); //Ajout de la nouvelle puce sur la scène

p.addEventListener(MouseEvent.CLICK, clic_sur_occurence); //Ajout d'un écouteur commun à chaque puce
}

Le problème, c'est que l'on ne peut pas accéder à une occurence en particulier. Si je veux que la puce n°5 tourne de 30°, je ne peux pas, car je n'ai pas d'acces unique à l'occurence n°5. De cette manière, nous n'avons plus aucun contrôle sur les occurences qui ont été crées.

Ma deuxième solution, qui se rapproche plus de se qu'on pouvait avoir en AS2 à l'époque, consiste à créer un clip qui va contenir l'ensemble des occurences générées par ma boucle. De cette manière, on peut spécifier un nom pour chaque occurence. Par la suite, pour accéder à une occurence précise, il suffit de cité le clip contenant toutes les occurences et le nom de l'occurence désiré.

function clic_sur_occurence(e:MouseEvent):void
{
//Accéder aux propriétés de l'occurence
e.target.name;
e.target.x;
e.target.rotation;
e.target.scaleY;
e.target.alpha;
e.target.visible;

//Accéder aux variables de l'occurence
e.target.maVariable1;
e.target.maVariable2;
e.target.maVariable3;
}

//Création d'un clip pour contenir toutes mes occurences
var container:MovieClip = new MovieClip();
addChild(container);

//Création de 10 "puce"
for(var i=0; i<10; i++)
{
var p:MovieClip = new puce(); //Création d'une nouvelle puce sur la base du clip "puce" présent dans la bibliothèque

container.addChild(p); //Ajout de la nouvelle puce dans le container

container["puce"+i] = p; //Définit le nom de la nouvelle puce
container["puce"+i].x = 10 * i; //Définit la position sur X de la nouvelle puce
container["puce"+i].y = 20 * i; //Définit la position sur Y de la nouvelle puce
container["puce"+i].uid = i; //Enregistre l'identifiant de cette puce. "uid" est une variable crée dans le clip "puce" (var uid;)

container["puce"+i].addEventListener(MouseEvent.CLICK, clic_sur_occurence); //Ajout d'un écouteur commun à chaque puce
}

//Faire tourner de 30 degrés la puce n°5
container["puce5"].rotation = 30;
Commentaire(s)
Aucun.