# Dar a la entrada del teclado un contrato claro

> Haga que el juego del teclado sea predecible eligiendo teclas semánticas, manejando el estado de presionar y soltar y evitando conflictos con los valores predeterminados del navegador.

- URL: https://oneshotgems.ai/es/topics/keyboard-controls-for-games
- Categoría: Para desarrolladores de juegos
- Tipo: Guía
- Actualizado: 5 de octubre de 2026

El control con teclado resulta fiable cuando cada tecla tiene una función clara y el juego distingue entre una pulsación y mantener una tecla pulsada. Anota la asignación prevista antes de implementarla: por ejemplo, las flechas dirigen, Espacio realiza una acción y Escape abre un menú de pausa solo si ese menú existe. Después prueba el foco, la repetición y la liberación, en vez de comprobar únicamente un keydown.

## 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

**¿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.

## Sigue tu curiosidad

- [Administrar el enfoque en juegos de navegador](https://oneshotgems.ai/es/topics/game-focus-management): Haga que las entradas con el teclado, los menús y las rutas de retorno sean predecibles dándole al juego un estado de enfoque visible y restableciendo el enfoque después de que se cierren las superposiciones.
- [Prueba la entrada de juegos de navegador en distintos dispositivos](https://oneshotgems.ai/es/topics/testing-game-input-devices): Cree una pequeña matriz de prueba de entrada que cubra el comportamiento real del tacto, el mouse, el teclado y la orientación en lugar de depender de una sola sesión de escritorio.
- [Evitar que las teclas se queden pulsadas en juegos de navegador](https://oneshotgems.ai/es/topics/preventing-stuck-game-keys): Libere el movimiento retenido de forma segura cuando cambie el enfoque o la visibilidad, y pruebe las rutas de desenfoque, pausa y reinicio que pueden dejar la entrada del juego bloqueada.

## Más información

- [MDN: evento de teclado](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)

---
Página canónica: https://oneshotgems.ai/es/topics/keyboard-controls-for-games
