Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

Dê aos listeners um responsável e um ciclo de vida definidos

Se um clique for disparado duas vezes após a reinicialização, um ouvinte poderá ser registrado sempre que a cena for aberta e nunca removido. Esse sintoma visível de ação duplicada é diferente de uma ampla investigação de vazamento de memória: comece contando os registros e vinculando-os ao ciclo de vida da cena. Cada ouvinte deve ter um proprietário claro, um ponto de configuração que seja executado uma vez para esse proprietário e um caminho de desmontagem quando a cena parar de aceitar entrada.

Nesta página

Registre-se em um limite deliberado do ciclo de vida

Evite anexar um manipulador de keydown de janela de uma função de renderização ou de cada quadro. Coloque a configuração específica da cena em uma função de inicialização ou montagem e certifique-se de que a função não possa ser executada duas vezes sem limpeza. Mantenha uma referência ao retorno de chamada ao usar removeEventListener; retornos de chamada anônimos criados repetidamente são difíceis de corresponder posteriormente. Como alternativa, forneça um AbortController a um grupo de manipuladores relacionados e passe seu sinal nas opções do ouvinte e, em seguida, aborte esse grupo quando a cena terminar.

Escolha os alvos do evento com cuidado. Um ouvinte de janela global pode ser apropriado para teclas enquanto um jogo está ativo, mas o manipulador de cliques de um botão pertence a esse botão. Não registre um manipulador de delegação pai e um manipulador direto para a mesma ação, a menos que a propagação de eventos faça parte intencionalmente do design.

Teste a entrada repetida de cenas como uma verificação de sintomas

Abra uma cena, pressione sua ação uma vez, saia e abra-a novamente. Uma entrada ainda deve causar um efeito. Repita o ciclo cinco vezes e verifique se a contagem de respostas permanece uma por pressionamento; esta é uma verificação funcional, não uma medição de memória. Confirme também se a entrada da cena antiga não muda mais sua pontuação ou estado após a saída. O MDN documenta o suporte do AbortSignal para agrupar ouvintes e observa que funções anônimas precisam de referências retidas para remoção explícita.

Mantenha a desmontagem alinhada com a propriedade

Quando uma cena é substituída, aborte ou remova seus ouvintes antes de descartar os objetos aos quais eles fazem referência. Se alguns ouvintes pertencerem a todo o shell do aplicativo, mantenha-os em um proprietário de vida mais longa, em vez de removê-los a cada rodada. Adicione um caso de regressão em torno dos fluxos de reinicialização, pausa e retorno ao menu, pois cada transição pode acidentalmente montar a mesma cena duas vezes ou pular sua limpeza.

Perguntas sobre ⁨evitar ouvintes duplicados de eventos de jogo⁩

Por que pressionar uma tecla produz múltiplas ações de jogo?

A mesma ação pode ter vários manipuladores registrados, ou tanto um ancestral quanto um filho podem processar o evento. Conte registros e inspecione a propagação de eventos no limite do ciclo de vida da cena.

O AbortController pode remover ouvintes de eventos?

Sim. Adicione ouvintes relacionados com o mesmo sinal e aborte o grupo quando seu proprietário terminar. Isso dá ao grupo um caminho de desmontagem claro; isso não substitui a decisão de qual proprietário os controla.

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