# Dê à entrada do teclado um contrato claro

> Torne a jogabilidade do teclado previsível escolhendo teclas semânticas, controlando o estado de pressionar e soltar e evitando conflitos com os padrões do navegador.

- URL: https://oneshotgems.ai/pt-BR/topics/keyboard-controls-for-games
- Categoria: Para desenvolvedores de jogos
- Tipo: Guia
- Atualizado: 5 de outubro de 2026

O controle por teclado é confiável quando cada tecla tem uma função clara e o jogo diferencia um toque de manter uma tecla pressionada. Anote o mapeamento pretendido antes de implementá-lo: por exemplo, as setas direcionam, Espaço executa uma ação e Escape abre um menu de pausa somente se ele existir. Depois, teste o foco, a repetição e a liberação, em vez de validar apenas um keydown.

## Escolha as chaves por significado e layout

Use KeyboardEvent.key quando a ação deve depender do caractere produzido pelo layout de teclado da pessoa; use KeyboardEvent.code quando a posição física da tecla for mais importante. Essa distinção afeta diferentes layouts. Ofereça um mapeamento consistente e mostre-o nas instruções, em vez de presumir que todo mundo espera WASD.

Não intercepte teclas enquanto um campo de texto ou controle editável estiver em foco. Impeça o comportamento padrão do navegador, como rolar a página, somente quando a área de jogo estiver tratando ativamente aquela tecla. Assim, o jogo não captura a digitação comum nem atrapalha a navegação antes de a pessoa entrar na área interativa.

## Acompanhe as teclas mantidas e a liberação

Para movimento contínuo, ative o estado de uma tecla em keydown e limpe-o em keyup. O navegador pode repetir keydown enquanto a tecla estiver pressionada; por isso, uma ação única como pular deve ignorar repetições, a menos que repeti-las seja intencional. Limpe as teclas mantidas quando o jogo perder o foco ou a janela ficar desfocada, pois o jogo pode não receber keyup depois que o foco mudar para outro lugar.

Teste duas teclas ao mesmo tempo, um pressionamento longo, um toque rápido e o comportamento quando o jogo perde e recupera o foco. Para ações únicas, ignore eventos keydown repetidos, a menos que a repetição seja intencional. A MDN documenta KeyboardEvent.key, KeyboardEvent.code e os tipos de evento; escolha a propriedade adequada ao mapeamento.

## Perguntas

**Devo usar KeyboardEvent.key ou KeyboardEvent.code em um controle do jogo?** Use KeyboardEvent.key quando o caractere ou o layout do teclado deve determinar a ação. Use KeyboardEvent.code quando a posição física da tecla for o controle pretendido. Deixe essa escolha explícita e teste outros layouts.

**Por que limpar as teclas mantidas quando a página perde o foco?** Depois que o foco muda, o navegador pode não enviar ao jogo o evento de liberação keyup. Limpar o estado de entrada evita que o movimento continue ativo quando a pessoa voltar.

## Siga sua curiosidade

- [Gerencie o foco em jogos de navegador](https://oneshotgems.ai/pt-BR/topics/game-focus-management): Torne a entrada do teclado, os menus e os caminhos de retorno previsíveis, dando ao jogo um estado de foco visível e restaurando o foco após o fechamento das sobreposições.
- [Teste as entradas de jogos de navegador em vários dispositivos](https://oneshotgems.ai/pt-BR/topics/testing-game-input-devices): Crie uma pequena matriz de teste de entrada que cubra o comportamento real de toque, mouse, teclado e orientação, em vez de depender de uma sessão de desktop.
- [Evite que teclas fiquem pressionadas em jogos de navegador](https://oneshotgems.ai/pt-BR/topics/preventing-stuck-game-keys): Libere o movimento retido com segurança quando o foco ou a visibilidade mudarem e teste os caminhos de desfoque, pausa e reinicialização que podem deixar a entrada do jogo travada.

## Leitura complementar

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

---
Página canônica: https://oneshotgems.ai/pt-BR/topics/keyboard-controls-for-games
