Olá, Gustavo, tudo bem?
Desculpe pela demora por um retorno.
Gostei muito da customização do seu jogo, utilizando o Homer e a sua gelada, ficou incrível!!
Essa sua pergunta é muito interessante, quando estamos adentrando mais no universo de desenvolvimento de jogos é imprescindível que pensemos no game design, de permitir uma experiência mais fluída para o jogador. E essa questão aborda bem isso.
Para solucionar a questão do clique da seta estar pressionada e acabar colidindo em um dos carros, poderemos criar uma variável booleana, que fará o controle do movimento do ator, e só permitir do ator se movimentar caso seja verdadeira. Utilizaremos também a função nativa do JavaScript setTimeout()
, onde ela fará o bloqueio do movimento do ator, durante alguns milissegundos, para quando o ator voltar ao início, caso a tecla esteja pressionada, ele não irá se movimentar. Esse bloqueio será efetuado na função retornaAtorPontoZero()
.
Abaixo segue os códigos com os comentários:
//variavel que fara o controle do movimento
let isMovLivre = true;
function movimentaAtor(){
//O ator só entrará em movimento caso a variavel isMovLivre seja true
if (isMovLivre){
if (keyIsDown(UP_ARROW)){
yAtores[0]-=3
}
if (keyIsDown(DOWN_ARROW)){
if (podeSeMover()){
yAtores[0]+=3
}
}
}
}
function retornaAtorPontoZero(){
yAtores[0] = yInicialAtor;
xAtores[0] = Math.random() * 400;
xAtores [1] = xAtores[0];
isMovLivre = false; //aqui o ator nao entrara em movimento
setTimeout(() => {isMovLivre = true;}, 750); //executa o codigo isMovLivre quando atingir 750 milisegundos
}
Segue a documentação explicando mais detalhadamente sobre a função seTimeout()
:
Espero ter ajudado.
Reforço que estou à disposição para tirar dúvidas.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!