Elija claves por significado y diseño
Usa KeyboardEvent.key cuando la acción deba depender del carácter que genera la distribución del teclado del usuario, y KeyboardEvent.code cuando importe más la posición física de la tecla. La diferencia afecta a distintas distribuciones. Ofrece una asignación coherente y muéstrala en las instrucciones, en vez de dar por hecho que todo el mundo espera usar WASD.
Evita interceptar teclas mientras un campo de texto o un control editable tiene el foco. Impide el comportamiento predeterminado del navegador, como el desplazamiento de la página, solo cuando la superficie de juego gestione activamente esa tecla. Así el juego no se traga lo que alguien escribe ni interrumpe la navegación antes de que entre en la zona interactiva.
Controla el estado de las teclas mantenidas y su liberación
Para el movimiento continuo, activa el estado de una tecla al recibir keydown y desactívalo al recibir keyup. Mientras se mantiene una tecla, el navegador puede repetir keydown; por eso, una acción de una sola vez como saltar debe ignorar las repeticiones, salvo que repetirla sea intencional. Borra el estado de las teclas mantenidas cuando el juego pierda el foco o la ventana deje de tenerlo, porque puede que el juego no reciba keyup si el foco ya se trasladó a otro lugar.
Prueba dos teclas a la vez, una pulsación larga, un toque rápido y el comportamiento al perder y recuperar el foco. Para acciones de una sola vez, ignora keydown repetidos salvo que la repetición sea intencional. MDN documenta KeyboardEvent.key, KeyboardEvent.code y los tipos de eventos; elige la propiedad que corresponda a tu asignación.
Preguntas sobre controles de teclado para juegos de navegador
¿Debo usar KeyboardEvent.key o KeyboardEvent.code para un control del juego?
Usa KeyboardEvent.key cuando la acción dependa del carácter o de la distribución del teclado. Usa KeyboardEvent.code cuando deba importar la posición física de la tecla. Indica claramente qué opción elegiste y prueba otras distribuciones.
¿Por qué hay que borrar las teclas mantenidas cuando la página pierde el foco?
Tras un cambio de foco, el navegador puede no enviar al juego el evento de liberación keyup. Borrar el estado de entrada evita que el movimiento siga activo cuando el jugador vuelve.
Más información
¿Has visto algo desactualizado? Notificar una corrección