J'ai beaucoup lu sur les forums et les didacticiels, mais je n'arrive toujours pas à comprendre les événements et les écouteurs d'événements. J'ai un exemple assez simple, mais je n'arrive pas à le faire fonctionner.Ajout d'un écouteur d'événement personnalisé dans as3
J'ai une arrayCollection d'objets personnalisés dans un répéteur, lorsque l'un de ces objets est cliqué, je veux un composant différent pour afficher les données associées à cet objet.
Voici ce que j'ai, mais l'écouteur ne répond jamais (le répartiteur semble fonctionner, parce que le nouvel événement est créé et je peux voir la trace avec la bonne sortie.) Je suppose que c'est parce que quand j'appelle addEvent Écouteur, je le fais sur le mauvais objet. Ma compréhension est que l'objet qui affichera les données de l'objet est l'objet qui devrait avoir l'écouteur d'événement, et écouter tous les événements de cette nature, mais peut-être que j'ai mal compris.
Mon événement personnalisé:
public class SelectObjectEvent extends Event
{
public function SelectObjectEvent(customEventString:String, myObject:customObject)
{
super(customEventString, true, false);
trace(customEventString+" "+myObject);
}
}
}
Mon objet personnalisé a la fonction suivante qui est appelé clic:
public function selectObject(myObject:customObject):void
{
dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", customObject));
}
Et la composante je veux afficher l'objet sélectionné a le constructeur suivant:
public function SelectedObjectDisplayClass()
{
addEventListener("OBJECT_SELECTED", this.showObject)
}
public function showObject(event:Event):void
{
trace("Show object: "+event);
}
Eh bien ... oui, le second morceau appartient à un objet qui envoie l'événement, mais ce n'est pas cliquable, et il ne s'étend pas EventDispatcher autant que je sache (il étend UIComponent.) Il est un objet de jeu qui se trouve dans un composant List. Lorsque cet objet de la liste est sélectionné, il distribue son événement. Chaque objet qui distribue un événement doit-il étendre EventDispatcher? – Martholomew
Peut-être alors mon problème est que la liste devrait envoyer l'événement, avec l'objet sélectionné dans l'argument? – Martholomew
Eh bien, DisplayObject étend EventDispatcher, donc tout ce que vous avez sur scène le sera également. Je ne sais pas qui devrait envoyer l'événement - qui sait quand le faire, je suppose, mais cela dépend de votre code. Ce qui est certain, c'est que si A distribue l'événement et que B le reçoit, alors votre appel doit être someA.addEventListener (eventType, someB.method). En ce moment vous semblez avoir B ajoutant un écouteur d'événement à lui-même. – fenomas