Oneshot Gems
Jouer

Pour les développeurs de jeux

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

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.

Sur cette page

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

Continuez à jouer.

Des jeux gratuits sur navigateur, prêts quand vous l’êtes. Trouvez celui qui vous plaît et faites-en votre prochain favori.

Suivez votre curiosité