Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

as vezes o carrinho passando por cima e o personagem retorna ao ponto inicial

Estou tendo bastante dificuldade em ajustar a colisão. Muitas vezes o carrinho passa por cima do meu personagem (yoda) e ele volta ao ponto inicial como se estivesse colidido.

Ja tentei diminuir o tamanho do personagem, também já tentei aumentar a tela de fundo. Não queria ter que trocar o personagem :(

https://editor.p5js.org/eduardabitten/full/5-DIEaBhC

codigo carros

let xCarros = [830, 830, 830, 830, 830, 830, 415, 415, 415, 415, 415, 415];
let yCarros = [75, 175, 275, 370, 470, 570, 75, 175, 275, 370, 470, 570];
let velocidadeCarros = [5.3, 3.5, 3.3, 3.7, 4.5, 5, 5.3, 3.5, 3.3, 3.7, 4.5, 5];
let larguraCarros = [65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65];
let alturaCarros = [45, 45, 45, 55, 45, 45, 45, 55, 45, 45, 45, 45];


function mostraCarro(){
  for (let c = 0; c < imagemCarro.length; c = c + 1){
    image(imagemCarro[c], xCarros[c], yCarros[c], larguraCarros[c], alturaCarros[c]);
  }
}

function movimentaCarro(){
  for (let c = 0; c < imagemCarro.length; c = c + 1){
    xCarros[c] -= velocidadeCarros[c]
  }
}

function repetirMovimento(){
  for (let c = 0; c < imagemCarro.length; c = c +1){
    if (passouATela(xCarros[c])){
      xCarros[c] = 830
   }
  }
}

function passouATela (xCarros){
  return xCarros < -65;
}

codigo personagem

//personagem
let xYoda = 60;
let yYoda = 640;
let colidiu = false;

function mostraPersonagem(){
  image(personagem, xYoda, yYoda, 55, 45)
}

function movimentarYoda(){
  if (keyIsDown(UP_ARROW)){
    yYoda -= 3;

  }
  if (keyIsDown(DOWN_ARROW)){
    yYoda += 3;
  }
  if (keyIsDown(RIGHT_ARROW)){
    xYoda += 3;
  }
  if (keyIsDown(LEFT_ARROW)){
    xYoda -= 3;
  }

}

function verificarColisão(){
  for (let c = 0; c < imagemCarro.length; c = c +1){
    colidiu = collideRectCircle(xCarros[c], yCarros[c], larguraCarros[c], alturaCarros[c], xYoda, yYoda, 35);
    if (colidiu){
      colisao();
    }
  }  
}

function colisao(){
  yYoda = 640;
}
1 resposta
solução!

Olá, Eduarda! Tudo bom?

Em primeiro lugar gostaria de parabenizá-la pelo projeto! Está excelente!

Em segundo lugar, você pode utilizar a função coliideRectRect()no lugar da collideRectCircle(), pois isso garante maior sensibilidade de colisão.

Em caso de dúvidas, fico à disposição.

Um abraço e bons estudos!