4
respostas

Como faço para que quando colida, o ator volte para a posição inicial e reset o valor da tecla pra cima?

Toda vez que colide ou marca um ponto, o ator volta pra posição inicial mas continua andando pra cima. Gostaria de saber uma maneira para que ele só se movesse se eu parasse de apertar a tecla pra cima e apertasse de novo, dando um reset no seu valor. Fui nas referências do p5js e não encontrei nada que desse certo, alguém ajuda?

4 respostas

Boa tarde Yuri!

Ele fica andando pra cima mesmo sem você pressionar nenhum botão? Normalmente, a função keyIsDown, associada ao comando if, já dá conta do recado para que o ator mova apenas quando estiver pressionando o botão:

if (keyIsDown(UP_ARROW)){yJogador -= velocidadeJogador}

em que yJogador é a variável do meu ator e velocidadeJogador é o valor que vai ser subtraído da variável anterior para criar movimento.

Se quiser colocar seu código aqui também para darmos uma olhada, talvez eu ou outra pessoa do fórum consiga ajudar melhor :D

Olá Danilo!

Eu quero fazer com que o ator pare de andar quando pontuar, pois se eu pontuar, ele volta pra posição inicial já andando. Então o jogador bate no carro da primeira fila se não parar de apertar a tecla. Eu quero que a pessoa pontue, volte para a posição inicial e o ator pare, e só movimente de novo se eu tirar o dedo da tecla e apertar de novo.

Obs: Bia é uma amg minha que quer entrar na Alura, e eu coloquei a foto dela em vez de ser da vaquinha haha

<script> 
//código do ator
let xAtor = 85;
let yAtor = 366;
let colisao = false;

let meusPontos = 0;


function mostraAtor () {
       image(imagemBia,xAtor, yAtor, 30, 30);
  }

function movimentaAtor() {

  if (keyIsDown(UP_ARROW)) {
      yAtor -= 3;

      }

  if (keyIsDown(DOWN_ARROW)) {
      yAtor += 3;

      }
  if (keyIsDown(LEFT_ARROW)) {
      xAtor -= 3;

      }
  if (keyIsDown(RIGHT_ARROW)) {
      xAtor += 3;

      }
}

function verificaBorda () {
  if (xAtor < 0 ) {
    xAtor += 3; 

  }
  if (xAtor > 470) {
    xAtor -= 3; 

  }
   if (yAtor < -10) {
    yAtor += 3; 

  }
    if (yAtor > 366) {
    yAtor -= 3; 

  }
}

function verificaColisao () {

   for (let i = 0; i < imagemCarro.length; i++) {
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 15)

    if (colisao) {
      print("Colidiu")

      voltaAtorParaPosicaoInicial();
      somDaColisao.play();

      if (pontosMaiorQueZero()) {
        meusPontos -= 1;
        }
       }
      }
     }

function voltaAtorParaPosicaoInicial(){
  yAtor = 366; 
  xAtor = 100;

}

function incluiPontos () {
  textAlign(CENTER);
  textSize(25);
  text("Ajude a Bia a atravessar a rua", 300, 25)

  textAlign(CENTER);
  textSize(25);
  fill(color(255,240,60));
  text(meusPontos, width / 5, 27);

}

function marcaPonto(){
  if (yAtor < 15){
    meusPontos += 1;
    yAtor = 366;
    somDoPonto.play();

  } 
}

function pontosMaiorQueZero(){
  return meusPontos > 0

}

</script>

Código completo já do curso está aí em cima

Entendi.

Eu tentei dar uma pesquisada e li que tem uma função chamada sleep e tentei aplicar no meu código.

Todavia, minhas aplicações deram errado :/

if (marcarPontos()){movimentaJogador.sleep(1000)}

if (marcarPontos()){movimentaJogador(sleep(1000))}

Ambas tentativas acabaram com meu jogo travando assim que a vaquinha fez ponto