3
respostas

Bolinha não bate na raquete do oponente

Não quis importar a biblioteca que o professor sugeriu para verificar o Movimento da raquete tocando na bola. Dai tentei fazer utilizando oq ele fez na aula anterior, mas a bola passa direto pela raquete.

O código q fiz:

function verificaMovimRacOpo(){ if (xBola - raio < xRaqOpo + comprimentoRaqOpo && yBola - raio < yRaqOpo + alturaRaqOpo && yBola + raio > yRaqOpo) { velocidadeX *= 1; //raquete.play(); } } Link do código completo: https://editor.p5js.org/Dev-Organizada/sketches/UPUEUfgxe

3 respostas

Oie Nathaly, tudo bom?

Vê, as funções para fazer as colisões das raquetes são parecidas, mas não necessariamente iguais, vi que você alterou o nome das variáveis para poder corresponder às informações da Raquete Oposta, mas também precisamos alterar um pouquinho da lógica, vem comigo!

Primeiro vamos analisar o que acontecer na raquete original:

xBola - raio < xRaq + comprimentoRaq

Primeiro subtraímos o raio da bola do ponto X da bola pois queremos achar o ponto de contato do lado esquerdo da bola. Depois, nós somamos o comprimento da raquete ao X da raquete pois queremos achar o ponto de contato do lado direito da raquete. Por fim, usamos o sinal de menor que para saber se o ponto de colisão da bola está antes do ponto de colisão da raquete. Faz sentido?

Show, vamos para a raquete oposta agora:

xBola + raio > xRaq - comprimentoRaq

Agora queremos achar o ponto de contato a direita bola, por isso somamos o raio (do X da bola). Também queremos agora achar o ponto de contato à esquerda da raquete oposta, e por isso, subtraímos o comprimento da raquete oposta (ao seu X). Por fim, precisamos verificar se o ponto de contato da bola passou do ponto de contato da raquete oposta, e por isso usamos o maior que.

E para finalizar, a velocidade sempre deve ser multiplicada por -1, em ambos os casos. Pois, se a bola estiver indo para a direita, ela irá para a esquerda ao tocar na raquete oposta, e se tiver indo para a esquerda ela irá para a direita ao tocar na raquete original. Então, em ambas as funções use:

velocidadeX *= -1;

Segue o código!

function verificaMovimRacOpo(){
  if (
      // Soma para colidar com a borda certa da bola
      xBola + raio 
      // Maior que para verficar valor certo no eixo X
      > 
      // Subtração para colidir com a borda certa da raquete 
      xRaqOpo - comprimentoRaqOpo
      && yBola - raio < yRaqOpo + alturaRaqOpo 
      && yBola + raio > yRaqOpo
     ) {    
        // Sendo negativo, inverte-se a direção do vetor
        velocidadeX *= -1; 
        raquete.play();
  }
}

Espero ter ajudá-la.

Reforço que estou à disposição para tirar dúvidas.

Abraços,

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software