3
respostas

A contagem da colisão não está 100% ... Onde está o erro?

Boa tarde alurassss. A contagem de quando a vaquinha consegue atravessar a avenida está ok, porém quando há uma colisão não é toda vez que contabiliza... alguém sabe o por que?

//código do ator

let xAtor = 100;
let yAtor = 366;
let colisao = false;
let meusPontos = 0;
let meusErros = 0;


function mostraAtor(){
  image(imagemDoAtor, xAtor, yAtor , 30, 30);

}

function movimentaAtor(){
  if (keyIsDown(UP_ARROW)){
    yAtor -= 3
  }
  if (keyIsDown(DOWN_ARROW)){
    yAtor += 3
  }
}

function verificaColisao(){
  //collideRectCircle(x1, y1, width1, height1, cx, cy, diameter)
    for (let i = 0; i < imagemCarros.length; i = i + 1){
     colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 15)
   if (colisao)
     voltaProInicio();

    }

}

function voltaProInicio(){
  yAtor = 366;
}

function voltaProInicio2(){
  if (yAtor < 5){
    meusPontos = meusPontos + 1;
    alert("PARABÉNS VAQUINHA! QUERO VER QUANDO FOR A VEZ DA SUA AMIGA TARTARUGA...") 
    voltaProInicio();
  } if (colisao){ 
    meusErros -= 1;
  }
}

function incluiPontos(){
  textAlign(CENTER);
  textSize(25);
  fill(0,0,255);
  text(meusPontos, 30, 25);
  text(meusErros, 400, 25);

}
3 respostas

Observe seu código e reparei que na função verificaColisao(), no IF falta o abre chave e fechar chave pode ser isso que tenha dado erro.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Não é esse o motivo não Antônio, mas obrigado... reparei também que eu só perco pontuação quando atinjo o primeiro carro do jogo, que está no 1º andar, o resto eu faço a colisão mas somente volto pra posição inicial, sem perda de pontos..

A função voltaProInicio2() esta sendo chamada em algum lugar ?

tente assim:

//código do ator

let xAtor = 100;
let yAtor = 366;
let colisao = false;
let meusPontos = 0;
let meusErros = 0;


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

function movimentaAtor(){
  if (keyIsDown(UP_ARROW)){
    yAtor -= 3;
  }
  if (keyIsDown(DOWN_ARROW)){
    if(podeSeMover()){
    yAtor += 3;
    }
  }
}

function verificaColisao(){
  //collideRectCircle(x1, y1, width1, height1, cx, cy, diameter)
  for (let i = 0; i < imagemCarros.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 15)
    if (colisao){
      voltaAtorParaPosicaoInicial();
      meusErros += 1;
    }
  }
}

function voltaAtorParaPosicaoInicial(){
  yAtor = 366;
}

function incluiPontos(){

  textSize(25);
  fill(0,0,255);
  text("Acertos " + meusPontos, 30, 25);
  text("Erros " + meusErros, 400, 25);
}

function marcaPonto(){
  if (yAtor < 15){
    meusPontos += 1;
    voltaAtorParaPosicaoInicial();
  }
}
function marcaPonto(){
  if (yAtor < 15){
    meusPontos += 1;
    voltaAtorParaPosicaoInicial();
  }
}

function pontosMaiorQueZero(){
    return meusPontos > 0;
}

function podeSeMover(){
    return yAtor < 366;
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software