1
resposta

Minha colisão da um erro.

Ao usar X para colisão a bolinha atravessa a raquete, agora se eu coloco como colisão pro Y da certo, o que posso ter feito?

//variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro /2;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento =10;
let raqueteAltura = 90;

let colidiu = false;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaBorda();
  mostraRaquete();
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  //verificação colisão raquete
  colisaoBibliotecaRaquete();


}

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

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

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

  if (yBolinha + raio > height || yBolinha - raio < 0){
    velocidadeYBolinha *=-1
  }
}

function mostraRaquete(){
 rect(xRaquete, yRaquete, 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 colisaoBibliotecaRaquete(){
  colidiu =
  collideRectCircle(xRaquete,yRaquete,raqueteComprimento,raqueteAltura, xBolinha, yBolinha,raio);
  if (colidiu){
  velocidadeXBolinha *= -1 * AQUI NO CASO ACONTECE O ERRO, SE EU MUDO PARA "YBolinha" a colisão acontece.
  }
}
1 resposta

Ei, Felipe, tudo bem?

Isso está acontecendo pela variável diametro ter recebido um valor muito pequeno (15). A colisão funcionará normalmente se você mudar para um valor mais alto, como, por exemplo, 22. Sua linha da variável ficará desta forma:

let diametro = 22;

Após alterar (somente mudar o número será necessário), seu jogo terá a colisão funcionando certinho.

Se a dúvida permanecer, estou à disposição.

Abraços e bons estudos!

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