# Donner aux écouteurs un propriétaire et un cycle de vie uniques

> Arrêtez les saisies et les rappels répétés en donnant aux écouteurs d'événements de chaque scène un propriétaire, une limite de configuration et un chemin de démontage clairs.

- URL: https://oneshotgems.ai/fr/topics/preventing-game-event-listener-duplicates
- Catégorie: Pour les développeurs de jeux
- Type: Guide
- Mis à jour le: 5 octobre 2026

Si un clic se déclenche deux fois après un redémarrage, un écouteur peut être enregistré à chaque ouverture de la scène et ne jamais être supprimé. Ce symptôme visible d’action en double est différent d’une vaste enquête sur une fuite de mémoire : commencez par compter les enregistrements et les lier au cycle de vie de la scène. Chaque écouteur doit avoir un propriétaire clair, un point de configuration qui s'exécute une fois pour ce propriétaire et un chemin de démontage lorsque la scène cesse d'accepter des entrées.

## Inscrivez-vous à une limite délibérée du cycle de vie

Évitez d'attacher un gestionnaire de touches de fenêtre à partir d'une fonction de rendu ou de chaque image. Placez la configuration spécifique à la scène dans une fonction de démarrage ou de montage et assurez-vous que cette fonction ne peut pas être exécutée deux fois sans nettoyage. Conservez une référence au rappel lors de l'utilisation de removeEventListener ; les rappels anonymes créés à plusieurs reprises sont difficiles à égaler plus tard. Vous pouvez également attribuer un AbortController à un groupe de gestionnaires associés et transmettre son signal dans les options d'écoute, puis interrompre ce groupe à la fin de la scène.

Choisissez soigneusement les cibles de l'événement. Un écouteur de fenêtre global peut être approprié pour les touches lorsqu'un jeu est actif, mais le gestionnaire de clic d'un bouton appartient à ce bouton. N'enregistrez pas à la fois un gestionnaire de délégation parent et un gestionnaire direct pour la même action, sauf si la propagation des événements fait intentionnellement partie de la conception.

## Testez les entrées de scène répétées pour vérifier les symptômes

Ouvrez une scène, appuyez une fois sur son action, quittez-la et rouvrez-la. Une entrée devrait toujours provoquer un effet. Répétez le cycle cinq fois et vérifiez que le nombre de réponses reste un par pression ; il s'agit d'une vérification fonctionnelle, pas d'une mesure de mémoire. Vérifiez également que l'entrée de l'ancienne scène ne change plus son score ou son état après la sortie. MDN documente la prise en charge d'AbortSignal pour le regroupement des écouteurs et note que les fonctions anonymes nécessitent des références conservées pour une suppression explicite.

## Gardez le démontage aligné sur la propriété

Lorsqu'une scène est remplacée, abandonnez ou supprimez ses écouteurs avant de supprimer les objets auxquels ils font référence. Si certains écouteurs appartiennent à l'ensemble du shell de l'application, conservez-les dans un propriétaire à plus longue durée de vie au lieu de les supprimer à chaque tour. Ajoutez un cas de régression autour des flux de redémarrage, de pause et de retour au menu, car chaque transition peut accidentellement monter deux fois la même scène ou ignorer son nettoyage.

## Questions

**Pourquoi une seule pression sur une touche produit-elle plusieurs actions de jeu ?** La même action peut avoir plusieurs gestionnaires enregistrés, ou un ancêtre et un enfant peuvent traiter l'événement. Comptez les enregistrements et inspectez la propagation des événements à la limite du cycle de vie de la scène.

**AbortController peut-il supprimer les écouteurs d'événements ?** Oui. Ajoutez des écouteurs associés avec le même signal et annulez l'appel lorsque leur propriétaire termine. Cela donne à un groupe un chemin de démontage clair ; cela ne remplace pas la décision du propriétaire qui les contrôle.

## Suivez votre curiosité

- [Traquer les fuites de mémoire dans un jeu par navigateur](https://oneshotgems.ai/fr/topics/game-memory-leaks): Utilisez des contrôles de lecture et de nettoyage répétables pour rechercher les scènes de jeu, les auditeurs, les minuteries et les ressources conservés qui s'accumulent au fil du temps.
- [Gérer le focus dans les jeux par navigateur](https://oneshotgems.ai/fr/topics/game-focus-management): Rendez la saisie au clavier, les menus et les chemins de retour prévisibles en donnant au jeu un état de focus visible et en rétablissant le focus après la fermeture des superpositions.

## Pour aller plus loin

- [MDN addEventListener](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)

---
Page canonique: https://oneshotgems.ai/fr/topics/preventing-game-event-listener-duplicates
