Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

[Bug] Bolinha atravessa raquete com a colisão da biblioteca

Segui a estrutura do código mostrado em aula e a bolinha atravessa a raquete

Vi que outra pessoa teve o mesmo problema e resolveu trocando o raio pelo diâmetro, ou diminuindo o tamanho da bolinha, mas tentei as duas coisas e não funcionaram.

//var bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let vxBolinha = 6;
let vyBolinha = 6;
let raio = diametro / 2

//var raquete
let xRaquete = 5;
let yRaquete = 150;
let widthRaquete = 10;
let heightRaquete = 90;
let bateuNaRaquete = false;

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

function draw() {
  background(0);
  mostraBolinha();
  mexeBolinha();
  bolaNaBorda();
  mostraRaquete();
  mexeRaquete();
  //bolaNaRaquete();
  bateuNaRaquetebib();

}

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

function mexeBolinha(){
    xBolinha += vxBolinha
  yBolinha += vyBolinha

}

function bolaNaBorda(){
  if (xBolinha + raio > width || xBolinha - raio < 0){
     vxBolinha *= -1 
    }
  if (yBolinha + raio > height || yBolinha - raio < 0){
     vyBolinha *= -1 
  }
}

function mostraRaquete(){
    rect(xRaquete, yRaquete, widthRaquete, heightRaquete );

}

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

function bolaNaRaquete(){
  if (xBolinha - raio < xRaquete + widthRaquete && yBolinha - raio < yRaquete + heightRaquete && yBolinha + raio > yRaquete ){
    vxBolinha *= -1
  }
}

function bateuNaRaquetebib(){
  bateuNaRaquete = collideRectCircle(xRaquete, yRaquete, widthRaquete, heightRaquete, xBolinha, xBolinha, raio);
  if (bateuNaRaquete){
    vxBolinha *=-1;
  }
}
9 respostas

Você chegou a baixar a biblioteca? Coloquei o seu código aqui e disse que o "collideRectCircle" não está definido.

baixei sim, e referenciei, não tá mais dando nenhum codigo de erro, só não colide mesmo, troquei o raio por diametro mesmo agora porque no codigo da biblioteca aparece isso mesmo, mas ainda não foi

Você referenciou no index.html? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

sim, meu index tá assim

<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/addons/p5.sound.min.js"></script>
    <link rel="stylesheet" type="text/css" href="style.css">
    <meta charset="utf-8" />

  </head>
  <body>
    <main>
    </main>
    <script src="sketch.js"></script>
    <script src="p5.collide2d.js"></script>
  </body>
</html>

Edição: Erro meu. A variável estava sem a referencia do collide aqui.

Esse erro q tá aparecendo aí só deu pra mim antes de eu colocar:

<script src="p5.collide2d.js"></script>

Agora n tem mais mensagem de erro.

solução!

Achei o erro kkk Você colocou xBolinha onde deveria estar yBolinha. function bateuNaRaquetebib(){ bateuNaRaquete = collideRectCircle(xRaquete, yRaquete, widthRaquete, heightRaquete, xBolinha, xBolinha, raio); if (bateuNaRaquete){ vxBolinha *=-1; } }

caraca, vlw, fucionou agora kkkkkkk

Na vdd eu vi agora q n funcionou, o q me deu essa impressão foi ativar a colisão que eu tinha feito antes

if (xBolinha - raio < xRaquete + raqueteComprimento) {
        velocidadeXBolinha *= -1;
    }

experimenta incluir na funç