1
resposta

[Dúvida] bolinha n colide com raquete

após importar da biblioteca do p5.js minha bolinha simplesmente n mexe, n cnsg identificar onde errei, algm pode me ajudar?

//variaveis bolinha
let xBolinha = 300;
let yBolinha = 200
let dBolinha = 20;
let vxBolinha = 2;
let vyBolinha = 5;
let rBolinha = dBolinha /2;

//variaveis raquete 1
let xRaq1 = 2;
let yRaq1 = 150;
let wRaq1 = 8;
let hRaq1 = 100;

//variaveis raquete 2
let xRaq2 = 590;
let yRaq2 = 150;
let wRaq2 = 8;
let hRaq2 = 100;
let vyRaq2;

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


function Raq1(x, y){
  rect(x, y, wRaq1, hRaq1); }

function Bolinha(){
  circle (xBolinha, yBolinha, dBolinha)
}

function vBolinha(){
  xBolinha += vxBolinha
  yBolinha += vyBolinha
}

function draw(){
  background(0);
  Raq1(xRaq1, yRaq1);
  Bolinha();
  vBolinha();
  ColisaoBordas(); 
  mRaq1();
  ColisaoRaq1();
  Raq1(xRaq2, yRaq2);
  mRaq2();
  ColisaoRaq2();
}

function ColisaoBordas(){

  if (xBolinha + rBolinha > width || xBolinha - rBolinha < 0){vxBolinha *= -1;}

  {if (yBolinha + rBolinha > height || yBolinha - rBolinha < 0)  vyBolinha *= -1;}

}

function mRaq1(){

  if (keyIsDown(UP_ARROW)){
    yRaq1 -= 10;}

  if (keyIsDown(DOWN_ARROW)){
    yRaq1 += 10;}

}

function mRaq2(){
  vyRaq2 = yBolinha - yRaq2 - wRaq2 / 2 - 30 
  yRaq2 += vyRaq2

}


function ColisaoRaq1(){
  if (xBolinha - rBolinha < xRaq1 + wRaq1 && yBolinha - rBolinha < yRaq1 + hRaq1 && yBolinha + rBolinha > yRaq1){vxBolinha *= -1;}
      }


function ColisaoRaq2(){
  if (xBolinha - rBolinha < xRaq2 + wRaq2 && yBolinha - rBolinha < yRaq2 + hRaq2 && yBolinha + rBolinha > yRaq2){vxBolinha *= -1;}
      }
1 resposta

Oi, João Felipe! Tudo bem?

De acordo com o código enviado há apenas um pequeno probleminha, localizado na função ColisaoRaq2(), relacionado ao movimento no eixo x da bolinha.

Podemos notar que estamos usando a mesma lógica de colisão no eixo x entre a bolinha e a raquete 1 e a bolinha e a raquete 2, entretanto, ambas estão localizadas em extremos diferentes do eixo x, logo, enquanto a extremidade esquerda da bolinha bate na extremidade direita da raquete 1 e dessa forma a bolinha não deve possuir coordenada no eixo x menor que a da raquete ao colidir, o oposto ocorre com a raquete 2, pois a extremidade direita da bolinha deve entrar em contato com a extremidade esquerda da raquete 2, logo, a bolinha não deve possuir coordenada no eixo x maior que a da raquete 2 para ocorrer a colisão.

Dessa forma, para resolvermos o problema basta alterarmos a função ColisaoRaq2(), deixando-a da seguinte maneira:

function ColisaoRaq2(){
  if (xBolinha + rBolinha > xRaq2 && 
      yBolinha - rBolinha < yRaq2 + hRaq2 && 
      yBolinha + rBolinha > yRaq2){
        vxBolinha *= -1;
  }
}

Espero ter ajudado! Caso tenha restado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓