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.

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