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

A colisão não funciona

Eu revisei diversos detalhes no código, desde o sketch até o script do HTML, mas a colisão entre o Ator e os Carros não acontece.

//Código dos Carros

//Variáveis dos Carros
let xCarros = [600 , 600 , 600];
let yCarros = [40 , 95 , 150];
let velocidadeCarros = [2 , 3 , 4];

//Função que exibe os carros
function mostraCarros(){
  for(let i = 0; i < imagensDosCarros.length ; i = i + 1){
    image(imagensDosCarros[i], xCarros[i] , yCarros[i] , 50 , 40);
  }
}

//Função do movimento dos carros
function movimentaCarros(){
  for(let i = 0; i < imagensDosCarros.length ; i = i + 1){
    xCarros[i] = xCarros[i] - velocidadeCarros[i];
  }
}

//Função que retorna a posição
function voltaPosicaoDosCarros(){
  for(let i = 0; i < imagensDosCarros.length ; i = i + 1){
    if(passouTodaATela(xCarros[i])){
      xCarros[i] = 600;
    }
  }
}


function passouTodaATela(xCarro){
  return xCarro < -50;
}


//Código do Ator

//Variáveis do Ator
let xAtor = 100;
let yAtor = 366;
let colisao = false;
let alturaCarros = 40;
let comprimentoCarros = 50;


//Função que exibe o Ator
function mostraAtor(){
  image(imagemDoAtor, xAtor , yAtor , 30 , 30); 
}

//Função do movimento do Ator
function movimentaAtor(){
  if(keyIsDown (UP_ARROW)){
    yAtor = yAtor - 2;
  }

  if(keyIsDown (DOWN_ARROW)){
    yAtor = yAtor + 2;
  }

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

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

//Função que verifica a colisão entre o Ator e um Carro
function verificaColisao(){
  for( let i = 0 ; i < imagensDosCarros.length; i = i + 1){
    colisao = collidePointRect(xCarros[i], yCarros[i] , xAtor , yAtor , comprimentoCarros , alturaCarros , 30);
  }

  if(colisao){
    print("colidiu");
  }
}
4 respostas

Eduardo você ja tentou localizar o erro com o debugger do navegador ?? Abraços espero ter ajudado !

No código que você postou aqui no fórum, você esta usando a biblioteca de colisão "collidePointRect", a que encaixa melhor na aula é a "collideRectCircle". Tenta mudar isso e vê se funciona da maneira que você esta esperando.

Olá, eu fiz pequenos ajustes no código usando a função "collideRectCircle", porém o máximo que eu obtive de resultados foi ter as colisões apenas do primeiro carro (o amarelo) registradas.

//Função que verifica a colisão entre o Ator e um Carro
function verificaColisao(){
  for( let i = 0 ; i < imagensDosCarros.length; i = i + 1){
    colisao = collideRectCircle(xCarros[i], yCarros[i] , comprimentoCarros , alturaCarros , xAtor , yAtor , 50);
  }

  if(colisao){
    print("colidiu");
  }
}
solução!

Eu acho que você fechou o for no lugar errado, do jeito que esta aí, a verificação fica fora do loop. (Não sei se eu consegui ser claro, qualquer coisa só avisar)

Tenta fazer isso aqui.

  for (let i = 0; i < imagensDosCarros.length; i = i + 1){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarros, alturaCarros, xAtor, yAtor, 50)
    if(colisao){
     print("colidiu");
    }
}