Voici l'affaire: je travaille sur un portefeuille personnel en AS3 et j'ai rencontré un problème auquel je n'arrive pas à trouver une réponse logique. Je veux que tout (enfin, la plupart) soit éditable avec un fichier XML, y compris mon menu. Mon menu est juste un Sprite avec du texte dessus et un Tween-tween, pas de problème. Mais, j'ai oublié de penser à un moyen de déterminer quel élément de menu j'ai cliqué.Comment savoir quel objet j'ai cliqué?
C'est dans mes Main.as
private function xmlLoaded(e:Event):void {
xml = e.target.xml;
menu = new Menu(xml);
menu.x = 0;
menu.y = stage.stageHeight/2 - menu.height/2;
addChild(menu);
}
Dans Menu.as
public function Menu(xml:XML) {
for each (var eachMenuItem:XML in xml.menu.item) {
menuItem = new MenuItem(eachMenuItem);
menuItem.y += yPos;
addChild(menuItem);
yPos += menuItem.height + 3;
}
}
et dans mes MenuItem.as, tout fonctionne - je une interpolation de fantaisie quand je passe la souris dessus, mais quand je clique sur un élément de menu, je veux que quelque chose apparaisse du cours. Comment savoir sur lequel j'ai cliqué? J'ai essayé de tout pousser dans un tableau, mais cela n'a pas bien fonctionné (ou peut-être que je me trompe). J'ai également essayé un compteur global, mais cela ne fonctionne pas non plus car la valeur sera toujours la quantité d'éléments dans mon fichier XML. Également essayé e.currentTarget dans ma fonction de clic, mais quand je trace cela, tous sont "Object Sprite" .. J'ai besoin de quelque chose pour que je puisse donner à chacun un "nom" unique?
Merci d'avance!
Lorsque j'utilise la propriété name (si c'est ce que vous voulez dire), j'obtiens "instance4", "instance9", "instance14" dans ma trace dans le gestionnaire Click. Même quand je mets menuItem.name = "item" + compteur; dans mon Menu.as, je reçois toujours instanceX. Quand j'ai essayé de le lancer sur MenuItem (avec comme MenuItem), j'ai "null" (comme jolyonruss expliqué ci-dessous). Quand j'utilise un casting dur, je reçois # 1034: Impossible de convertir Sprite en MenuItem ... (Dois-je travailler avec un compteur?Je suis complètement perdu ici) Merci pour votre réponse! – Nick
patientez ... à quoi attachez-vous exactement l'écouteur d'événement? jolyonruss et moi avions supposé que vous étiez en train de l'attacher au menu, mais évidemment ce n'est pas le cas. La définition du nom fonctionnera, mais e.currentTarget pointe vers la mauvaise chose et ne trouve donc pas la variable de nom mise à jour. Si vous nous dites à quoi correspond l'écouteur d'événement, nous pouvons peut-être vous aider. Vous n'aurez probablement pas besoin d'utiliser un dictionnaire. – jonathanasdf
Dans mon MenuItem.as, je fais une "barre" (un Sprite avec un fond noir), j'ajoute le texte de mon XML dessus (dans mon Menu.as il fait une nouvelle instance de cette barre, et laisse une marge de 3px). Donc, dans mon MenuItem.as, j'ai un couple d'eventListeners. L'un d'entre eux est bar.addEventListener (MouseEvent.CLICK, mouseClickHandler). D'autres sont MOUSE_OVER/MOUSE_OUT pour faire cette interpolation de fantaisie dont je parlais. Cela fonctionne (sur chacun des 3 objets que j'ai maintenant), mais le CLIC me fait arracher tous mes cheveux. Merci pour votre réponse déjà, Jonathan :) – Nick