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

Bolinha não colide com a raquete

Fiz a programação da colisão da bolinha com a raquete no eixo X e até então o programa estava conforma o da aula, porém após programar a condicional de colisão em relação a posição da raquete no eixo Y a bolinha deixou de considera a colisão no eixo X, passando diretamente pela raquete, revi o código varias vezes mas não achei o erro, podem me ajudar? Segue abaixo o programa:


//Parametrôs relacionados a Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 15;
let raioBolinha = diametroBolinha/2

//Parametrôs relacionados a velocidade da Bolinha
let velocidadeBolinhaX = 2
let velocidadeBolinhaY = velocidadeBolinhaX

//Parametrôs relacionados a raquete
let xRaquete = 5
let yRaquete = 150
let comprimentoRaquete = 10
let alturaRaquete = 120


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

function draw() {
  background(0);
  criaBolinha();
  moveBolinha();
  colisaoBolinha();
  criaRaqueteMinha();
  moveRaqueteMinha();
  colisãoBolinhaMinhaRaquete();
}

function criaBolinha(){
  circle (xBolinha,yBolinha,diametroBolinha)
} 

function moveBolinha(){
 xBolinha+=velocidadeBolinhaX
 yBolinha+=velocidadeBolinhaY   
}

function colisaoBolinha(){
  if(xBolinha+raioBolinha>width||
     xBolinha-raioBolinha<0){
    velocidadeBolinhaX*=-1;
  }
                                                         if(yBolinha+raioBolinha>height||
   yBolinha-raioBolinha<0){                                              velocidadeBolinhaY*=-1;                                             
}
}
function criaRaqueteMinha(){
 rect(xRaquete, yRaquete, comprimentoRaquete,alturaRaquete) 
}
function moveRaqueteMinha(){
  if(keyIsDown(UP_ARROW)){
    yRaquete -=10;
}
  if(keyIsDown(DOWN_ARROW)){
    yRaquete +=10;{
}
  }
}
function colisãoBolinhaMinhaRaquete(){
  if(xBolinha-raioBolinha<xRaquete+comprimentoRaquete
    && yBolinha-raioBolinha>yRaquete+comprimentoRaquete
    && yBolinha+raioBolinha<yRaquete){
    velocidadeBolinhaX*=-1;
}
}
5 respostas

Oi Gustavo tudo bem?

Usei a função de colisão collideRectCircle que o professor ensinou e o código funciona agora. Dá uma olhadinha


//Parametrôs relacionados a Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 10;
let raioBolinha = diametroBolinha/2

//Parametrôs relacionados a velocidade da Bolinha
let velocidadeBolinhaX = 8
let velocidadeBolinhaY = velocidadeBolinhaX

//Parametrôs relacionados a raquete
let xRaquete = 5
let yRaquete = 150
let comprimentoRaquete = 10
let alturaRaquete = 120


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

function draw() {
  background(0);
  criaBolinha();
  moveBolinha();
  colisaoBolinha();
  criaRaqueteMinha();
  moveRaqueteMinha();
  colisãoBolinhaMinhaRaquete();
}

function criaBolinha(){
  circle (xBolinha,yBolinha,diametroBolinha)
} 

function moveBolinha(){
 xBolinha+=velocidadeBolinhaX
 yBolinha+=velocidadeBolinhaY   
}

function colisaoBolinha(){
  if(xBolinha+raioBolinha>width||
     xBolinha-raioBolinha<0){
    velocidadeBolinhaX*=-1;
  }
                                                         if(yBolinha+raioBolinha>height||
   yBolinha-raioBolinha<0){                                              velocidadeBolinhaY*=-1;                                             
}
}
function criaRaqueteMinha(){
 rect(xRaquete, yRaquete, comprimentoRaquete,alturaRaquete) 
}
function moveRaqueteMinha(){
  if(keyIsDown(UP_ARROW)){
    yRaquete -=10;
}
  if(keyIsDown(DOWN_ARROW)){
    yRaquete +=10;{
}
  }
}
function colisãoBolinhaMinhaRaquete(){
 colidiu = collideRectCircle(xRaquete, yRaquete,comprimentoRaquete,alturaRaquete,xBolinha,yBolinha,raioBolinha);
  if (colidiu){
    velocidadeBolinhaX *= -1;

  }
}

Espero ter ajudado!!!

Olá André, como vai?

Obrigado pela ajuda, com esta função de fato o código funciona, porém eu queria entender o porque de o código não ter funcionado da maneira anterior.

solução!

Na sua função você inverteu o sinal na última condição

&& yBolinha+raioBolinha<yRaquete){

o correto é

&& yBolinha+raioBolinha>yRaquete){

porque o y da bolinha mais o raio da bolinha precisa ser maior que o y da raquete para estar na faixa de colisão.

Você tem razão, obrigado pelo Feedback!

Disponha e bons estudos!!!