Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Colisão não funciona.

Oi.

Fiz o passo a passo, copiei e colei e a colisão ainda assim não funciona.

Em suma, parece que a função de colidir não está sendo rodada.Com ou sem a biblioteca carregada não faz diferença nenhuma.

Eu até nem apaguei a mensagem padrão do console mas ainda assim é como se ele nem existisse.

Abaixo o meu código do Ator, mas acredito que não fará diferença porque parece idêntico ao do curso. Então deixo aqui o link do código completo caso ajude a descobrir.

https://editor.p5js.org/valcolr/sketches/q0ynIezJf

let xAtor = 100;
let yAtor = 366;
let colisao = false;


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++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 15)
    if (colisao){
      print("Colidiu")
    }
  }
}
2 respostas
solução!

Fala Vicent, beleza?

Pelo link completo que você mandou algumas coisas estavam faltando para a função de colisão funcionar.

1- Primeiro você tem que chamar a função la no sketch.js:

function draw() {
  background(imagemDaEstrada);
  mostraAtor();
  mostraCarro();
  movimentaCarro();
  movimentaAtor();
  voltaPosicaoInicialDoCarro();
  verificaColisao();
}

2 - Depois tem que referenciar o arquivo p5.collide2d.js la no index.html:

<body>
    <script src="sketch.js"></script>
    <script src="imagens.js"></script>
    <script src="ator.js"></script>
    <script src="carro.js"></script>
    <script src="p5.collide2d.js"></script>
  </body>

3 - Por ultimo, o código de colisão está referenciando listas que ainda não estão definidas. Dessa forma, teria que organizar as variáveis de imagemCarros, xCarros e yCarros. Sem contar que as variáveis comprimentoCarro e alturaCarro ainda não foram definidas.

Sendo assim, no arquivo imagens.js adicionaria:

  imagemCarros = [imagemCarro, imagemCarro2, imagemCarro3];

E no arquivo carro.js:

let comprimentoCarro = 50;
let alturaCarro = 40;

let xCarros = [600, 600, 600];
let yCarros = [40, 96, 150];
let velocidadeCarros = [2, 2.5, 3.2];

function mostraCarro() {
  image(imagemCarro, xCarros[0], yCarros[0], 50, 40);
  image(imagemCarro2, xCarros[1], yCarros[1], 50, 40);
  image(imagemCarro3, xCarros[2], yCarros[2], 50, 40);
}

function movimentaCarro() {
  xCarros[0] -= velocidadeCarros[0];
  xCarros[1] -= velocidadeCarros[1];
  xCarros[2] -= velocidadeCarros[2];
}

function voltaPosicaoInicialDoCarro() {
  if (xCarros[0] < -50) {
    xCarros[0] = 600
  }
  if (xCarros[1] < -50) {
    xCarros[1] = 600
  }
  if (xCarros[2] < -50) {
    xCarros[2] = 600
  }

}

Rodei aqui e deu certo desse jeito. Espero ter ajudado. Abraços !

Obrigado

o erro eu acredito que era por não chamar no sketch mesmo. Essas listas todas estavam ok aqui pra mim. Talvez tenha compartilhado uma versão anterior do que eu fiz.