3
respostas

Bolinha não colide com raquete

Boa tarde pessoal!

Na aula utilizamos o código de colisão do Github, mas na hora de colocar pra rodar, a bolinha está passando a raquete. Não consegui identificar o erro, já copiei o código disponibilizado na aula, mas o erro permanece. Alguém consegue me ajudar?

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 50;
let raio = diametro / 2 ;

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

//variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

let colidiu = false;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete();
  movimentaMinhaRaquete();
  //verificaColisaoRaquete();
  colisaoMinhaRaqueteBiblioteca();

}

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(){
  rect(xRaquete, yRaquete, comprimentoRaquete, alturaRaquete);
}

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

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

function colisaoMinhaRaqueteBiblioteca() {
    colidiu = collideRectCircle(xRaquete, yRaquete, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, raio);
    if (colidiu) {
        velocidadeXBolinha *= -1;
    }
}
3 respostas

Ainda não entendi exatamente pq mas parece que a função do github tem algum problema com o diâmetro muito grande, talvez a atualização da imagem.

Se aqui

let xRaquete = 5;

Você colocar 30 por exemplo, sua raquete vai mais para o centro e vc vai ver que a bolinha colide sim, o que acontece é que ela passa um pouco, e como a raquete está muito próxima, da a impressão que passa direto.

Se vc diminuir o diâmetro para 30 por exemplo já funciona, mesmo com o x da raquete em 5. Pode fazer ai que vai funcionar

let diametro = 30;

Gabriel, creio que se você colocar o parâmetro "diametro" ao invés de "raio" no seu "collideRectCircle" deve resolver a questão.

A variável "raio" não é um parâmetro do circle e como os parâmetros do collideRectCircle referem-se à raquete e a bolinha, não cabe o "raio".

Obrigada Israel Faria Lopes! Funcionou com sua resposta.