Appliquer une fonction à un enfant d'un clip parent via "getChildAt"

chanteur fou fou - 11 janv. 2013 à 11:49
 chanteur fou fou - 16 janv. 2013 à 15:22
Bonjour à tous,

Je tiens à préciser (vous allez vite le voir) que je suis un bidouilleur débutant en AS. Je suis en fait plus orienté Webdesign côté créa et je pêche durement en prog...

Voici mon problème :

J'ai un clip (touttexte) sur ma scène, dans ce clip il y a des clip enfants (joue, bugge, crame, etc.(je suis emmené à en mettre un vingtaine en tout). Je veux appliquer au passage de la souris une TweenLite sur chaque clip enfants de manière indépendantes... mais je ne sait pas comment récupérer le numéro du clip enfant. C'est la parti dans le code ou j'ai mis les "?????"

Voici mon code actuel :
""""""""""""""""""""""""""""""""""""""
for (var i:uint = 0; i < touttexte.numChildren; i++) {
touttexte.buttonMode = true;
touttexte.getChildAt(i).addEventListener( MouseEvent.MOUSE_OVER, onClick);
}
function onClick(event:MouseEvent):void
{
TweenLite.from(touttexte.?????, 1, {ease:Bounce.easeOut, scaleX:1.5, scaleY:1.5, delay:0});
//trace("> " + event) ;
}
"""""""""""""""""""""""""""""""""""""""""""""""""""


Comme vous le voyez j'ai choisi d'utiliser le numéro du clip enfant pour le reconnaitre et nom le nom de l’occurrence. Si je ne suis pas sur la bonne voie n'hésitez pas à me le dire ;)
J'ai fais des recherches et vu que je pouvais peut être créer un tableau en nomment tous les clip enfants bibi1, bibi2, bibi3 etc. puis le retrouver avec ["bibi"+i] pour l'appliquer dans le TweenLite mais je galère aussi...

Désolé si je n'ai pas été assez clair et merci d'avance :)

6 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 janv. 2013 à 12:20
Bonjour, je vais te donner une méthode "simple", mais politiquement incorrecte qui est souvent utilisée par ceux qui ne sont pas encore passé au tout POO car venant d'AS2 :

Dans ton clip à appeler, tu places la propriété "name" à la valeur que tu veux, puis pour l'appeler tu peux utiliser : "touttexte.getChildByName()" en indiquant le nom de ton clip enfant donné précédemment.

Peg'
0
chanteur fou fou
11 janv. 2013 à 12:30
Merci Peg' pour cette réponse éclair ! Je penses que tu me surestime car j'avoue ne pas très bien comprendre ce que tu me dis...
Entre temps, on m'a soufflé cette réponse et ça à l'air de marché :

event.currentTarget à la place de "touttexte.?????" dans le TweenLite

C'est bien celons toi ?
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 janv. 2013 à 14:19
oui, c'est même mieux (je n'avais pas bien lu ton code, j'avoue).

Peg'
0
chanteur fou fou
11 janv. 2013 à 14:21
faute avouée à moitié pardonnée ;)

@ une prochaine fois
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chanteur fou fou
11 janv. 2013 à 17:26
Changement de situation et nouveau problème :

Malheureusement après avoir rencontré des bugs d'affichage, je suis partie sur cette méthode qui marche à merveille (sauf que je vais devoir rentrer une vingtaine de ref dans le tableau) :

""""""""""""""""""""""""""""""""""""""""""""""""
var menu_array : Array = [touttexte.joue,touttexte.crame,touttexte.bugge,touttexte.test1234];

for (var i:int=0; i<menu_array.length; i++) {
menu_array[i].buttonMode = true;
menu_array[i].addEventListener(MouseEvent.MOUSE_OVER, scaleUp);
menu_array[i].addEventListener(MouseEvent.MOUSE_OUT, scaleDown);
menu_array[i].addEventListener(MouseEvent.CLICK, clickHandler);
}

function scaleUp(e:MouseEvent):void {
TweenLite.to(e.currentTarget,.3 ,{scaleX:1.5, scaleY:1.5, ease:Bounce.easeOut});
}

function scaleDown(e:MouseEvent):void {
TweenLite.to(e.currentTarget,.3 ,{scaleX:1, scaleY:1, ease:Bounce.easeOut});
}

function clickHandler(e:MouseEvent):void{
trace("Menu Item clicked : " + e.currentTarget.name);
}

"""""""""""""""""""""""""""""""""

j'utilise également un fichier XML pour récupérer du texte, titre et image qui s’affiche dans un clip : "conteneurinfos" à l'intérieur duquel il y a 2 champs texte dynamique et un clip qui charge l'image.

Cela fonctionne bien si je le met en dur directement à la racine du code du style :

"""""""""""""""""""""""""""""""""
var conteneurImage:Loader = new Loader();
var xmlData1:XML = new XML();
var theURL_ur1:URLRequest = new URLRequest("textejeu.xml");
var loader_ul1:URLLoader = new URLLoader(theURL_ur1);
loader_ul1.addEventListener("complete", fileLoaded1);
function fileLoaded1(e:Event):void
{
xmlData1 = XML(loader_ul1.data);
// url de l'image ou du swf à charger
var image:URLRequest = new URLRequest(xmlData1.textejeu[0].@image);
conteneurinfos.infotitrejeu.htmlText = xmlData1.textejeu[0].@titre;
conteneurinfos.infotextejeu.htmlText = xmlData1.textejeu[0];
// chargement de l'image ou du swf dans le conteneur
conteneurImage.load(image);
//conteneurinfos.chargeurimage.load(image);
conteneurImage.x=-80;
conteneurImage.y=-200;
// affichage du conteneur
conteneurinfos.chargeurimage.addChild(conteneurImage);
}
"""""""""""""""""""""""""""""""

2 QUESTIONS :

1 : Comment faire en sorte d'implanter cette fonction dans la fonction "clickHandler" (premier bout de code partie basse) sans copier/coller la totalité du deusieme bout de code dans la fonction "clickHandler" ?

2 : Comment récupérer les éléments du tableau premiere partie de code (Array = [touttexte.joue,touttexte.crame,touttexte.bugge,touttexte.test1234];) et les implanté en tant que numéros (0,1,2,3) dans les noeuds de mon XML exemple xmlData1.textejeu[0].@titre; ou xmlData1.textejeu[0].@titre; ...etc ??? J'imagine que je vai me retrouver avec un [i] mais ici, le i sert déjà pour récupérer un élément du tableau et correspond donc à un nom et non à un chiffre...

Surement très confus, je m'en excuse

Merci d'avance,
0
chanteur fou fou
16 janv. 2013 à 15:22
up :)
0
Rejoignez-nous