1
resposta

Mão Dupla

A linha amarela indica uma via de duplo sentido de circulação então fiz isso:

function movimentarCarros() {
    xCarros[0] -= velocidades[0];
    xCarros[1] -= velocidades[1];
    xCarros[2] -= velocidades[2];
    xCarros[3] += velocidades[3];
    xCarros[4] += velocidades[4];
    xCarros[5] += velocidades[5];
}

Os carros de baixo, que vão para direita, atropelam a vaca quando tocam o para-choque nela, e os de cima, que vão para esquerda, é perceptível que a vaca vai para debaixo do carro. Como faço para o dois ficarem iguais?

1 resposta

Olá, Marcelo, tudo bem?

Obrigada pela paciência por um feedback.

Para a sensibilidade da colisão do ator com o carro, dependerá do tamanho do diâmetro utilizado na função verificaColisao, utilizamos o valor 15, mas você poderá testar um número maior. Testei o valor 35 e aparentemente a colisão fica mais assertivo.

Segue o código com a alteração:

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, 
      35)//valor modificado visando uma colisao mais assertiva

    if (colisao){
      voltaAtorParaPosicaoInicial();
      let posicaoSom = getRandomNumber(0, listaDeSons.length - 1);
      listaDeSons[posicaoSom].play();
      console.log("Touco o " + (posicaoSom + 1) + "º som.");
    }
  }
}

Porém, não entendi muito bem o porquê da colisão está com comportamento diferente nas duas vias, pois a função verificaColisao deveria funcionar igualmente independente dos sentidos. Portanto, peço que me envie o link para assim olhar com mais atenção e identificar qual o erro que está gerando esse comportamento.

Ficarei no aguardo.

Abraços,

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