1
resposta

Duplicação da função de colisão das raquetes

Oi,

Fiz o primeiro exercício de apenas duplicar a função de colisão da bolinha nas raquetes com apoio da biblioteca. Mas não funcionou.

function colideBiblio(xRaq,yRaq,compRaq, altRaq, xBolinha, yBolinha, raio){
  colidiu = collideRectCircle(xRaq, yRaq, compRaq, altRaq, xBolinha, yBolinha, raio);
  if (colidiu){
    velXBolinha *= -1;
  }
}

function colideBiblio2(xOp,yOp,compRaq, altRaq, xBolinha, yBolinha, raio){
  colidiu = collideRectCircle(xOp, yOp, compRaq, altRaq, xBolinha, yBolinha, raio);
  if (colidiu){
    velXBolinha *= -1;
  }
}

Inseri a função no draw, mas não deu certo. As variáveis do oponente também estão declaradas antes. A bolinha colide na minha raquete e não colide na do oponente.

Também tentei fazer uma única função com parâmetros x e y. Tampouco funcionou. Será bug do P5?

//Variáveis de posição e tamanho da Bolinha:
let xBolinha = 300;
let yBolinha = 200;
let diametro = 30;
let raio = diametro / 2;

//Variáveis de movimento da Bolinha
let velXBolinha = 6;
let velYBolinha = 6;

//Variáveis da Raquete
let xRaq = 5;
let yRaq = 150;
let compRaq = 10;
let altRaq = 90;

//Variáveis Oponente
let xOp = 585
let yOp = 150;
let velOp;

let colidiu = false;



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

function draw() {
  background(0);
  mostraBola();
  moveBola();
  attBorda();
  mostraRaq(xRaq, yRaq);
  mostraRaq(xOp, yOp);
  movRaq();
  movOp();
  colisaoRaqs(xRaq, yRaq);
  colisaoRaqs(xOp, yOp);
  //colideBiblio();
  //colideBiblio2();
  //bordaRaq();
  borda2();

}

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

function moveBola(){
  xBolinha += velXBolinha
  yBolinha += velYBolinha
}

function attBorda(){
  if (xBolinha + raio > width ||
     xBolinha - raio < 0) {
    velXBolinha *= -1
  }
  if (yBolinha + raio > height ||
    yBolinha - raio < 0) {
    velYBolinha *= -1
  }
}

function mostraRaq(x,y){
  rect(x, y, compRaq, altRaq);
}

function movOp(){
  velOp = yBolinha - yOp - compRaq/2 - 30;
  yOp += velOp
}

function movRaq(){
  if (keyIsDown(DOWN_ARROW)){
    yRaq += 10;
  }
  if (keyIsDown(UP_ARROW)){
    yRaq -= 10;
  }
}

//function bordaRaq(){
 // if (xBolinha - raio < xRaq + compRaq && yBolinha - raio < yRaq + altRaq && yBolinha + raio > yRaq) {
   // velXBolinha *= -1;
  //}

function borda2(){
  if (xBolinha - raio < xRaq + compRaq && yBolinha + raio > yRaq && yBolinha - raio < yRaq + altRaq) {
    velXBolinha *= -1;}
  }

//function colideBiblio(xRaq, yRaq, compRaq, altRaq, xBolinha, yBolinha, raio){
  //colidiu = collideRectCircle(xRaq, yRaq, compRaq, altRaq, xBolinha, yBolinha, raio);
  //if (colidiu){
    //velXBolinha *= -1;
 // }
//}

// function colideBiblio2(xOp, yOp, compRaq, altRaq, xBolinha, yBolinha, raio){
 // colidiu = collideRectCircle(xOp, yOp, compRaq, altRaq, xBolinha, yBolinha, raio);
  //if (colidiu){
    //velXBolinha *= -1;
 // }
//}

function colisaoRaqs(x, y, compRaq, altRaq, xBolinha, yBolinha, raio){
  colidiu = collideRectCircle(x, y, compRaq, altRaq, xBolinha, yBolinha, raio);
  if (colidiu){
    velXBolinha *= -1;
  }
}

SOS

1 resposta

Então meu amigo, eu creio que é um bug existente no P5, pois estou com o mesmo problema.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software