# Limpe o estado de entrada quando uma tecla for solta sem que o jogo perceba

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

- URL: https://oneshotgems.ai/pt-BR/topics/preventing-stuck-game-keys
- Categoria: Para desenvolvedores de jogos
- Tipo: Guia
- Atualizado: 5 de outubro de 2026

Um jogo que registra as teclas mantidas costuma definir uma sinalização ao pressionar a tecla e removê-la ao soltar. Se a pessoa trocar de aba enquanto mantém uma direção pressionada, o jogo pode não receber o evento de soltura e continuar se movendo quando o foco voltar. Esse é um problema de ciclo de vida, diferente da escolha de boas teclas de controle. Deixe explícito o conjunto de teclas mantidas, limpe-o em pontos de interrupção definidos e teste cada situação que possa interromper uma pressão antes de considerar o problema resolvido.

## Rastreie as prensas como estado, não como eventos de movimento repetidos

No keydown, adicione a chave relevante a um Set; durante a etapa de atualização, leia esse conjunto para decidir o movimento. No keyup, remova-o. Isso evita tratar os eventos de repetição de teclas do sistema operacional como o relógio de movimento do jogo. Ignore também um segundo pressionamento de tecla para uma tecla já pressionada quando a ação deveria começar apenas uma vez, como disparar um único tiro carregado. MDN descreve que manter uma chave pode produzir eventos repetidos de pressionamento de tecla, e KeyboardEvent.repeat pode identificar esses eventos repetidos em navegadores suportados.

Escolha quais teclas contam como controles do jogo e deixe os campos de texto de lado. Se um campo de prompt ou de entrada de nome tiver foco, os manipuladores de movimento não deverão consumir os mesmos caracteres. Evite padrões do navegador, como rolagem de página, apenas para controles que realmente precisam desse comportamento e restaure o comportamento normal da página quando o jogador sair da área de jogo.

## Limpe o conjunto de interrupções e mudanças de estado

Limpe a entrada retida quando a janela ficar desfocada, o documento ficar oculto, uma sobreposição de pausa assumir o controle ou a execução for reiniciada. Um manipulador de visibilidadechange pode verificar document.hidden e limpar o conjunto quando ele se tornar verdadeiro. Não limpe cegamente cada quadro ou movimento do ponteiro; vincular a compensação a uma interrupção onde uma chave pode não chegar. Faça com que o jogo exija um novo pressionamento de tecla após a retomada, em vez de retomar o movimento antigo automaticamente.

## Reproduzir os caminhos de interrupção

Segure para a esquerda e alterne as guias, segure pular e abra um menu e pressione uma direção enquanto ocorre uma reinicialização. Ao retornar ao jogo, verifique se o personagem permanece imóvel até outro pressionamento deliberado. Repita com duas teclas simultâneas, como direita mais salto, e certifique-se de que a limpeza de uma tecla não deixe a outra travada. Inclui mudanças de foco do teclado entre os controles do jogo e a entrada de texto.

## Perguntas

**Por que uma tecla pode continuar pressionada depois que eu a solto?** O jogo pode não receber ou processar o evento keyup correspondente quando o foco muda ou uma sobreposição assume o controle. Redefinir o estado retido nesses caminhos de interrupção dá ao jogador uma retomada sem entradas presas.

**A repetição da tecla deve controlar o movimento do personagem?** Para movimento contínuo, rastreie o estado retido e atualize o movimento no loop do jogo. Repetir é mais útil para distinguir eventos repetidos de pressionamento de tecla do pressionamento inicial, quando uma ação deveria acontecer uma vez.

## Siga sua curiosidade

- [Projete controles de teclado para jogos de navegador](https://oneshotgems.ai/pt-BR/topics/keyboard-controls-for-games): 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.
- [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.

## Leitura complementar

- [Evento de teclado MDN](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)
- [Mudança de visibilidade MDN](https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event)

---
Página canônica: https://oneshotgems.ai/pt-BR/topics/preventing-stuck-game-keys
