2010-05-25 4 views
0

J'ai tout essayé. Les tableaux sont assez simples, donc je ne sais pas pourquoi cela ne fonctionne pas.tableau ne fonctionnera pas actioncript 3

var menuList:Array = [menu_bag_mc,menu_chips_mc,menu_coke_mc,menu_cup_mc,menu_deodorant_mc,menu_fork_mc,menu_knife_mc,menu_lighter_mc,menu_milk_mc,menu_pill_mc,menu_rings_mc,menu_shampoo_mc,menu_spoon_mc,menu_straw_mc,menu_toothbrush_mc,menu_trashbag_mc,menu_water_mc]; 

function captureAllClicks(event:MouseEvent):void 
{ 
    trace(menuList.indexOf(event.target)); 
} 

stage.addEventListener(MouseEvent.CLICK, captureAllClicks); 

Chaque fois que je clique sur l'un des éléments sur la scène (qui sont tous donnés les noms d'instance énumérés ci-dessus chacun est un tweening movieclip contenant un bouton) J'ai une trace de -1. POURQUOI?!

Edit2

ce qui doit arriver:

for each (var mc:MovieClip in menuList) mc.addEventListener(MouseEvent.CLICK, createContent); 


//right here, i need to make a variable that I can put in the "addchild" so that 
//for every one of the list items clicked, it adds a movieclip child with 
//the same name (such as menu_bag_mc from above) with "_frame" appended. 
var framevar:MovieClip = menuList[i] += "_frame"; 

function createContent(event:MouseEvent):void { 
    if(MovieClip(root).currentFrame == 850) { 
    while(MovieClip(root).numChildren > 1) 
    { 
     MovieClip(root).removeChild(MovieClip(root).getChildAt(MovieClip(root).numChildren - 1)); 
    } 
MovieClip(root).addChild (framevar); 
MovieClip(root).addChild (closeBtn); 
} 
else { 
MovieClip(root).addChild (framevar); 
MovieClip(root).addChild (closeBtn); 
MovieClip(root).gotoAndPlay(806); 
} 
} 

Si je ne peux pas faire une variable, il n'y a pas de point pour l'ensemble « pour chaque » déclaration que vous mettez ensemble ... pas vraiment point pour un tableau, car je vais toujours devoir créer 20 lignes de code pour chaque séparé. Quel est le point d'avoir un tableau si vous ne pouvez pas faire des variables d'eux?

Répondre

1

parce que de toute évidence event.target semble ne pas être dans menuList.

l'explication la plus plausible est, que vos MovieClip s ont des enfants, que vous avez cliqué dessus et sont donc event.target.

Vous devez probablement définir mouseChildren sur false sur tous ceux MovieClip s. Ou vous pouvez enregistrer les gestionnaires individuels par movieclip comme ceci:

function captureAllClicks(event:MouseEvent):void { 
    trace(menuList.indexOf(event.currentTarget)); 
} 
for each (var mc:MovieClip in menuList) mc.addEventListener(MouseEvent.CLICK, captureAllClicks); 

greetz
back2dos

+0

Cela a fonctionné très bien. Pourriez-vous expliquer les mouseChildren? Je vais exécuter une fonction sur chacun de ces éléments de liste, alors pensez-vous que cela fonctionnerait mieux? – steve

+0

J'ai édité le ci-dessus pour montrer le nouveau code que j'ai qui fait cette fonction à tous les articles, et je récupère les paramètres corrects. Est-ce que le «pour chacun» que vous avez énuméré le mieux? De même, existe-t-il un moyen d'obtenir le nom réel de chaque élément de la liste? Pour que je puisse l'utiliser comme variable dans la nouvelle fonction ... – steve

+0

Pour élaborer ... disons que le paramètre dans la fonction est 'addChild (menu_bag_mc_frame);' y a-t-il un moyen (tel que menuList [i]) d'accéder une variable et ajouter "_frame"? Alors que sur chaque fonction, il charge un nouvel élément de la bibliothèque? – steve

0

pourquoi ne pas essayer event.currentTarget au lieu de event.target

aussi pour vous aider à tirer des problèmes, pourquoi n » t vous venez de suivre le event.target et tracez le event.currentTarget. Vous pouvez également parcourir votre tableau et tracer tous les objets qu'il contient. Ensuite, obtenez une meilleure idée visuelle de ce qui se passe.

+0

'event.currentTarget' sera toujours' stage' dans ce cas, ce qui est moins inutile. – back2dos

+0

@ back2dos Je trouve toujours e.target et e.currentTarget confus. –