1
resposta

Ajude o HOMER tomar uma gelada!!

LINK do game: https://editor.p5js.org/gutohd25/full/Wp09dsb3u

Ta aí o jogo do curso, muito feliz em ter terminado essa etapa.

aparentemente bem funcional.

apenas gostaria de adicionar um tempo de espera quando o ator retorna ao ponto inicial, pra nao acontecer uma colisao caso o jogador fique apertando a tecla.. se alguém poder ajudar com alguma dica, já deixei ele comecando um pouco abaixo da tela mas nao ficou 100%.

segue link editavel para quem quiser dar uma olhada: https://editor.p5js.org/gutohd25/sketches/Wp09dsb3u

1 resposta

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!