1
resposta

Bolinha segue a raquete oponente ao invês de não colidir nela

Pessoal, esse é o meu código. No final dele está a função para a bolinha não colidir com a raquete oponente, mas ao invês disso ela fica seguindo a raquete oponente na metade do campo. Alguém poderia me ajufar mostrando o erro do cód?


let xBolinha = 300;
let yBolinha = 175;
let diametro = 25;
let raio = diametro / 2 ;

let velocidadeXBolinha = 3
let velocidadeYBolinha = 3;

//Minharaquete
let xRaquete = 10
let yRaquete = 152;

let raquetecomp = 15;
let raquetealtura = 100;

//Raqueteoponente
let xRaqueteoponente = 530
let yRaqueteoponente = 152;
let raqueteoponentecomp = 15;
let raqueteoponentealtura = 100;
let velocidadeYOponente;


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  velocidadeBolinha();
  raquete (xRaquete, yRaquete);
  movimentaminharaquete ();
  raquete (xRaqueteoponente, yRaqueteoponente);
  Oponentemovimento (); 
  verificaColisaoRaquete (xRaquete,yRaquete);
  verificaColisaoRaquete (xRaqueteoponente,yRaqueteoponente)
 }

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


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

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

  if (yBolinha + raio > height || yBolinha - raio < 0 ){
    velocidadeYBolinha *=-1
  }
  }  
   function raquete (x,y) {
     rect(x, y, raquetecomp, raquetealtura);
   }


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


 function verificaColisaoRaquete(x,y) {
    if (xBolinha - raio < x + raquetecomp && yBolinha - raio < y + raquetealtura && yBolinha + raio > y) {
        velocidadeXBolinha *= -1;
    }
}


 function Oponentemovimento () {
    velocidadeYOponente = yBolinha - yRaqueteoponente - raqueteoponentecomp / 2 - 30;
    yRaqueteoponente += velocidadeYOponente
}
1 resposta

Olá, Kathleen! Tudo bem?

Sua iniciativa é muito interessante mas infelizmente não temos como reaproveitar a função que trabalha com a colisão da bolinha na raquete do lado esquerdo da tela, pois os valores correspondem somente aquele lado da tela. O que ocorre é um conflito de informações e por isso a bolinha fica tremendo no meio da tela. No entanto você pode adaptar a lógica para o lado direito da tela (do oponente) ou mesmo usar a solução que o instrutor oferece, que é o consumo da biblioteca collide2d.

Fico à disposição.

Um abraço e bons estudos!