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

Colisão Raquete Oponente buga

No curso foi apresentado a importação por biblioteca, porém eu gostaria de fazer de outra maneira a colisão da raquete do oponente. Como eu faço para inverter a colisão normal para a raquete do oponente sem ser pela biblioteca?

function colisaoRaquete1() {
  if (xB - R < xR1 + lR1&& yB - R < yR1 + aR1 && yB + R > yR1){
    vXB *= -1;    
  }
}
2 respostas
solução!

Oi Lucas, tudo bem?

Entendo que você quer fazer a colisão da raquete do oponente de uma maneira diferente da que foi apresentada no curso. No seu código, você está verificando a colisão da bola com a raquete 1. Para fazer a colisão com a raquete do oponente, você precisará verificar a posição da bola em relação à raquete do oponente.

Vamos considerar que as variáveis xRaqueteOponente e yRaqueteOponente representam a posição da raquete do oponente, e raqueteComprimento e raqueteAltura representam o comprimento e a altura da raquete, respectivamente. Podemos criar uma função de colisão para a raquete do oponente da seguinte forma:

function colisaoRaqueteOponente() {
  if (xB + R > xRaqueteOponente && yB - R < yRaqueteOponente + raqueteAltura && yB + R > yRaqueteOponente){
    vXB *= -1;    
  }
}

Nesse código, a condição xB + R > xRaqueteOponente verifica se a bola está colidindo com a raquete do oponente do lado direito. As outras duas condições verificam se a bola está dentro do intervalo vertical da raquete do oponente. Se todas as condições forem verdadeiras, a direção horizontal da bola é invertida (vXB *= -1).

Não esqueça de chamar a função colisaoRaqueteOponente() dentro da função draw() para que a colisão seja verificada a cada frame.

Espero que isso ajude a esclarecer como você pode implementar a colisão da raquete do oponente.

Lembre-se, isso é apenas uma sugestão e pode precisar de ajustes para se adequar perfeitamente ao seu código. Mas já é bom ponto de partida para você entender a lógica e praticar.

Um abraço e bons estudos.

Oii Lucas!

Como a Lorena disse, é totalmente possível implementar a colisão para a raquete do oponente sem utilizar a biblioteca, mas é necessário fazer algumas mudanças na lógica.

Para complementar, vou deixar aqui a função que implementei no meu Pong :)

function verificaColisaoRaquete() {
    if (xBolinha - raio < xRaquete + raqueteComprimento
        && yBolinha - raio < yRaquete + raqueteAltura
        && yBolinha + raio > yRaquete) {
        velocidadeXBolinha *= -1;
    }
} 

function verificaColisaoOponente(){
    if (xBolinha + raio > xRaqueteOponente - raqueteComprimento
        && yBolinha - raio < yRaquete + raqueteAltura
        && yBolinha + raio > yRaquete) {
        velocidadeXBolinha *= -1;
    }
}

Para entender melhor o funcionamento dessa lógica, é interessante conhecer mais a fundo o Plano Cartesiano do P5.js.

Espero que dê tudo certo por aí. Se precisar de mais alguma ajudinha, avisa a gente.

Abraços!