10
votes

Comment supprimer tous les auditeurs d'événements d'un objet d'affichage?

Y a-t-il un moyen de déterminer quels écouteurs d'événements sont enregistrés avec un objet d'affichage? Je souhaite supprimer tous les auditeurs d'événements d'un objet d'affichage afin que je puisse attribuer de nouvelles chances de contexte dans l'application.


2 commentaires

Fondamentalement, une dupe de celle-ci, connectée plus tôt aujourd'hui: Stackoverflow.com/questions/1452539/...


Mais la réponse courte est que vous devez gérer votre propre utilisation d'une carte de hachage ou de quelque chose.


5 Réponses :


4
votes

Glenn a raison, il n'existe pas de méthode de removealllistener ou de listeCalllistener. Néanmoins, vous pouvez faire de votre CustUm DiplayObject Mettre en œuvre le iEventDisPatcher Interface et gardez une trace de tous les auditeurs ajoutés ou supprimés de votre objet.


0 commentaires

7
votes

Jeceuyper a raison ...

un côté non si: displayObject s'étend EventDispatcher , qui implémente déjà ieventdispatcher ... pour être plus précis: vous devez Supprimer AddeventListener et RELEEVEREventListener Pour garder une trace des auditeurs ...

Quelques détails techniques: je vous suggère d'utiliser Dictionnaire pour stocker les fonctions du gestionnaire ... un peu plus lentement pour l'insertion, mais beaucoup plus rapide pour le retrait ... aussi, Dictionnaire Soutient des références faibles, qui est assez importante dans le cas de la manipulation des événements ... Gardez également à l'esprit que Usecapture permet d'ajouter le même gestionnaire deux fois ...

bonne chance alors ...;)


0 commentaires

8
votes

Back2DOS a mentionné l'approche que vous devriez utiliser, ce que j'ai fait était de prolonger la classe MovieClip et mis en œuvre toutes sortes de fonctions que j'utilise quotidiennement, mais ne font pas partie de la classe MovieClip. y compris le remplacement de la classe AddeventListener xxx


1 commentaires

... À l'exception de l'intégration de type dans la touche sans incorporer le pointeur de fonction signifie que vous ne pouvez avoir qu'un seul auditeur d'un type donné sur l'objet. Pour autoriser plusieurs auditeurs, ajoutez le pointeur de fonction d'auditeur sur l'objet Touche et définissez simplement la touche à une valeur nominale (par exemple 1).



2
votes

C'est une sorte de piratage, mais dans certains (peut-être la plupart des cas), vous pouvez facilement régler l'objet d'affichage sur NULL et le réinitialiser, puis le reconfigurer avec une perturbation visuelle zéro.

Ceci a le bonus supplémentaire de supprimer tous les auditeurs d'événements.

Sauf si vous le faites dans une application qui a déjà des centaines d'auditeurs et d'objets, il devrait fonctionner parfaitement aussi longtemps que vous pouvez tolérer la reconfiguration de votre objet d'affichage.

Évidemment, vous ne devriez pas faire cela sur quoi que ce soit qui fait quelque chose de fou dans le constructeur, comme le chargement de données.


0 commentaires

-1
votes
function a(){
    mc.addEventListener(Event.ENTER_FRAME,function(){
                       ...
                       }
}

function b(){
    mc.removeEventListener(Event.ENTER_FRAME,function(){});
}
works...

3 commentaires

Lisez la question plus attentivement. J'ai demandé comment supprimer tous les auditeurs d'événements d'un objet.


Je ne faisais que regarder cette question pour résoudre ce problème.


Cela ne fonctionnera pas - la fonction de gestionnaire d'événements anonyme créée dans fonction B est un objet différent de la fonction de gestionnaire d'événements anonyme créée dans Fonction A . Par conséquent, l'appel ReimenleventEventListener échouera en silence.