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

[Dúvida] Colisão entre ator e carros descentralizada

Olá pessoal. Eu concluí a etapa das animações e da colisão do ator com os carros do cenário. Porém, tenho uma dúvida em relação aos parâmetros utilizados para o diâmetro do ator e sua relação com a ação de colisão. Quando uso um número "x", dentro da função CollideRectCircle() que o instrutor usou, para indicar a área de impacto entre carro e ator, ocorre que na parte superior do personagem a colisão ocorre logo que a borda do carro entra em contato, mas para a parte inferior do ator (quando ele já passa o carro), parte dele é "comida" pelo veículo e ele não retorna à posição inicial. Nesse caso a colisão não é identificada.

![Colisão da parte superior do personagem](C:\Users\Jeanderson\Videos\Desktop\video 1.mp4)

![Colisão da parte inferior do personagem](C:\Users\Jeanderson\Videos\Desktop\video 2.mp4)

Segue o bloco de código utilizado:

//Código do Ator

let xAtor = 235;
let yAtor = 560;
let colisao = false;

function mostraAtor(){
  image(Ator, xAtor, yAtor, 40, 40);
}

function movimentaAtor(){
  if(keyIsDown(UP_ARROW)){
    yAtor -= 3;
}
  if(keyIsDown(DOWN_ARROW)){
    yAtor += 3;
  }  
}

function verificaColisao(){
    for (let i = 0; i < Carros.length; i += 1){
      colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarros, alturaCarros, xAtor, yAtor, 0);
    if (colisao){
      yAtor = 565
    }  
  }
}

Agradeço desde já a quem puder ajudar.

2 respostas
solução!

Opa! Tudo bem? Achei uma solução!

function verificaColisao(){
    for (let i = 0; i < Carros.length; i += 1){
      colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarros, alturaCarros, xAtor, yAtor + **alturaDoAtor / 2**, **15**);
    if (colisao){
      yAtor = 565
    }  
  }
}

As alterações estão destacadas com "** **".

É só somar a altura do ator, dividido por 2, ao y do ator e colocar um valor de referencia para sua circunferência! Espero ter ajudado!

Ah, perfeito! Muito obrigado David!! Deu super certo. Com matemática simples já deu para resolver o problema :D