Seguimiento de las prensas como estado, no como eventos de movimiento repetidos
En keydown, añada la tecla correspondiente a un conjunto; durante cada actualización, consulte ese conjunto para decidir el movimiento. En keyup, elimine la tecla. Esto evita tratar los eventos de repetición de claves del sistema operativo como el reloj de movimiento del juego. También ignore una segunda pulsación de tecla para una tecla que ya está presionada cuando la acción debería comenzar solo una vez, como disparar un solo tiro cargado. MDN describe que mantener presionada una tecla puede producir eventos repetidos de pulsación de tecla, y KeyboardEvent.repeat puede identificar esos eventos repetidos en los navegadores compatibles.
Elige qué teclas cuentan como controles del juego y deja los campos de texto en paz. Si un campo de entrada de nombre o mensaje tiene el foco, los controladores de movimiento no deben consumir los mismos caracteres. Evite los valores predeterminados del navegador, como el desplazamiento de páginas, solo para los controles que realmente necesitan ese comportamiento y restaure el comportamiento normal de la página cuando el jugador sale del área de juego.
Borrar el conjunto en caso de interrupción y cambio de estado.
Borre la entrada retenida cuando la ventana se vuelve borrosa, el documento se oculta, una superposición de pausa toma el control o la ejecución se reinicia. Un controlador de cambios de visibilidad puede verificar document.hidden y borrar el conjunto cuando se convierta en verdadero. No borre a ciegas cada cuadro o movimiento del puntero; vincular la limpieza a una interrupción en la que es posible que no llegue una llave. Haga que el juego requiera una nueva pulsación de tecla después de la reanudación en lugar de reanudar automáticamente el movimiento anterior.
Reproducir las rutas de interrupción.
Mantenga pulsada la tecla de dirección izquierda y cambie de pestaña, mantenga presionado el salto y abra un menú, y presione una dirección mientras se reinicia. Al volver al juego, verifica que el personaje permanezca quieto hasta que se vuelva a presionar intencionalmente. Repita con dos teclas simultáneas, como derecha más salto, y asegúrese de que al borrar una tecla no se deja la otra bloqueada. Incluya cambios de enfoque del teclado entre los controles del juego y la entrada de texto.
Preguntas sobre evitar teclas atascadas en juegos de navegador
¿Por qué una tecla puede quedarse pulsada después de soltarla?
Es posible que el juego no reciba ni procese el evento keyup correspondiente cuando el enfoque cambia o una superposición toma el control. Restablecer el estado retenido en esas rutas de interrupción permite que el jugador reanude la partida sin entradas atascadas.
¿La repetición de teclas debería controlar el movimiento del personaje?
Para un movimiento continuo, realiza un seguimiento del estado retenido y actualiza el movimiento en el bucle del juego. La repetición es más útil para distinguir los eventos repetidos de pulsación de tecla de la pulsación inicial cuando una acción debería ocurrir una vez.
Más información
¿Has visto algo desactualizado? Notificar una corrección