Oneshot Gems
Jouer

Pour les développeurs de jeux

Effacer l'état d'entrée lorsqu'un relâchement de touche est manqué

Un jeu qui mémorise les touches maintenues définit souvent un indicateur à l’enfoncement et l’efface au relâchement. Si le joueur change d’onglet en maintenant une direction, le jeu peut manquer l’événement de relâchement et continuer à avancer lorsque la fenêtre reprend le focus. C’est un problème de cycle de vie, distinct du choix des raccourcis clavier. Rendez explicite l’ensemble des touches maintenues, videz-le aux points d’interruption définis et testez chaque situation susceptible d’interrompre une pression avant de considérer le problème comme résolu.

Sur cette page

Suivre les pressions en tant qu'état, et non en tant qu'événements de mouvement répétés

Lors de la frappe, ajoutez la clé appropriée à un ensemble ; pendant l'étape de mise à jour, lisez cet ensemble pour décider du mouvement. Lors de la saisie, supprimez-le. Cela évite de traiter les événements de répétition de touches du système d'exploitation comme l'horloge du jeu. Ignorez également un deuxième appui sur une touche déjà enfoncée lorsque l'action ne doit commencer qu'une seule fois, comme par exemple tirer un seul coup chargé. MDN décrit que le fait de maintenir une touche peut produire des événements de frappe répétés, et KeyboardEvent.repeat peut identifier ces événements répétés dans les navigateurs pris en charge.

Choisissez quelles touches comptent comme commandes de jeu et laissez les champs de texte seuls. Si un champ d'invite ou de saisie de nom a le focus, les gestionnaires de mouvement ne doivent pas utiliser les mêmes caractères. Empêchez les paramètres par défaut du navigateur, tels que le défilement des pages, uniquement pour les contrôles qui ont réellement besoin de ce comportement, et restaurez le comportement normal de la page lorsque le joueur quitte la zone de jeu.

Effacer l'ensemble en cas d'interruption et de changement d'état

Effacez l'entrée maintenue lorsque la fenêtre devient floue, que le document devient masqué, qu'une superposition de pause prend le contrôle ou que l'exécution est réinitialisée. Un gestionnaire de changement de visibilité peut vérifier document.hidden et effacer l'ensemble lorsqu'il devient vrai. N'effacez pas aveuglément chaque image ou mouvement du pointeur ; liez la compensation à une interruption où un keyup peut ne pas arriver. Faire en sorte que le jeu nécessite un nouvel appui sur la touche après la reprise plutôt que de reprendre automatiquement l'ancien mouvement.

Reproduire les chemins d'interruption

Maintenez la touche gauche et changez d'onglet, maintenez sauter et ouvrez un menu, puis appuyez dans une direction pendant qu'un redémarrage se produit. En revenant au jeu, vérifiez que le personnage reste immobile jusqu'à un nouvel appui délibéré. Répétez avec deux touches simultanées, comme droite plus saut, et assurez-vous que l'effacement d'une touche ne laisse pas l'autre verrouillée. Incluez les changements de focus du clavier entre les commandes de jeu et une saisie de texte.

Questions sur ⁨empêcher les clés bloquées dans les jeux par navigateur⁩

Pourquoi une touche peut-elle rester enfoncée après que je l’ai relâchée ?

Le jeu peut ne pas recevoir ou traiter l’événement keyup correspondant lorsque le focus change ou qu'une superposition prend le contrôle. La réinitialisation de l'état maintenu sur ces chemins d'interruption permet au joueur de reprendre sans entrée bloquée.

La répétition de la touche devrait-elle contrôler le mouvement des personnages ?

Pour un mouvement continu, suivez l'état maintenu et mettez à jour le mouvement dans la boucle de jeu. La répétition est plus utile pour distinguer les événements de frappe répétés de la pression initiale lorsqu'une action doit se produire une seule fois.

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é