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 sur empêcher les écouteurs d'événements de jeu en double
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.
Pour aller plus loin
Vous avez repéré une information dépassée ? Signaler une correction