2
respostas

O jogador apenas faz a colisão com o carro preto.

Olá, boa tarde, eu estou tendo um problema que na questão do código, onde o jogador está indo em colisão com o carro, ele apenas verifica a colisão com o primeiro carro.

Não consigo ver onde está o erro da questão.

https://editor.p5js.org/patrickramosilva/sketches/cM0XhEGNf

E quando eu copio o código da aula normalmente, dá tudo certo!

edit: Consegui achar o erro, o

function verificaColisao(){
  for(let i = 0; i < imagemCarros.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 30)
  }  if(colisao){
      print("colidiu")
    }
}

Estava assim a função onde o if estava fora do laço "for", coloquei ele dentro como abaixo:

function verificaColisao(){
  for(let i = 0; i < imagemCarros.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 30)
    if(colisao){
      print("colidiu")
    }
  } 
}

Porém, queria entender porque isso acontece, e nem imaginava que dava para colocar if dentro da função for, como se fosse os IFs normais como:

if(talcoisa){
}if(talcoisa2){
} 

Não como if(talcoisa){
if(){
}
}
2 respostas

Olá Patrick, tudo bem? Espero que sim!

Fico feliz em saber que achou uma solução para o problema da colisão! Agradeço a atenção em postar a solução aqui no fórum, assim você irá ajudar outros aluno e alunas que podem ter o mesmo problema no código.

Na programação, você pode colocar um bloco de código condicional (como um if) dentro de outro bloco de código (como um for). Essa estrutura é chamada de aninhamento de blocos de código condicionais.

No seu caso, você tinha inicialmente o if fora do laço for, o que significa que ele seria executado apenas uma vez após o término do laço. Isso significa que o código dentro do if só seria executado uma vez, verificando se houve colisão entre os objetos.

Ao mover oif para dentro do laço for, você está executando o código de verificação de colisão para cada elemento no seu array imagemCarros. Dessa forma, oif é executado para cada objeto no array, verificando se houve colisão individualmente para cada um deles.

O uso de um if dentro de um laço for é uma prática comum em programação, pois permite que você execute um código condicional repetidamente para cada elemento de um conjunto de dados. No caso da sua função verificaColisao(), o if dentro do laço for permite que você verifique a colisão entre o objeto xAtore cada objeto no array imagemCarros, um por um.

Continue se dedicando aos estudos e praticando!

Caso tenha dúvidas, fico à disposição!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado pela explicação !