1
resposta

[Dúvida] Estou tentando fazer a colisão da raquete do adversário, estava dando certo até adicionar as outras condições.

//Propriedades Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro/2;

//Movimento Bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//Variaveis Raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura= 90;

//Variaveis Raquete Oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;


function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  movimentaRaqueteOponente();
  **verificaColisaoRaqueteAd();**
}

function mostraBolinha(){
    circle(xBolinha,yBolinha,diametro);
  }

function movimentaBolinha(){
    xBolinha += velocidadeXBolinha;
    yBolinha += velocidadeYBolinha;
  }

function verificaColisaoBorda(){
  if(xBolinha + raio > width || xBolinha - raio < 0){
    velocidadeXBolinha *= -1;}
  if(yBolinha + raio> height || yBolinha - raio < 0){
     velocidadeYBolinha *= -1;}
  }

function mostraRaquete( x, y){
    rect(x, y, raqueteComprimento, raqueteAltura);
  }

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
      yRaquete -= 10;}
  if (keyIsDown(DOWN_ARROW)){
      yRaquete += 10;}
  }

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

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

function movimentaRaqueteOponente(){
    yRaqueteOponente = yBolinha - 40;
  }
1 resposta

Olá, Paulo, tudo bem?

Obrigada pela paciência em obter o retorno.

Editei o seu post utilizando a opção </> daqui do fórum, assim o seu código fica em trecho de código e mais legível para outros alunos. Caso queira explorar mais outras funcionalidades, deixo esse vídeo para turbinar seus estudos utilizando o fórum:

Analisei o seu código e notei que optou por não utilizar a biblioteca que o professor utilizou, neste caso a raquete oponente terá a mesma lógica, mas por estar em uma posição diferente haverá uma diferença no código.

Na função verificaColisaoRaqueteAd() na verificação utilizaremos:

xBolinha + raio > xRaqueteOponente - raqueteComprimento.

Isso porque queremos achar o ponto de contato a direita, 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.

Na segunda verificação utilizaremos yBolinha + raio > yRaqueteOponente que fará a verificação na parte abaixo da bolinha.

Segue o código com as devidas alterações:

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

Espero ter ajudá-lo.

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!