Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

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

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.

Nesta página

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 sobre ⁨evitar teclas presas em jogos de navegador⁩

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.

Leitura complementar

Viu alguma informação desatualizada? Informar uma correção

Continue jogando.

Jogos grátis no navegador, prontos quando você quiser. Encontre um de que goste e faça dele seu próximo favorito.

Siga sua curiosidade