2
respostas

bolinha ignora a colisão com a borda

Mesmo com o código da biblioteca a bolinha ignora a colisão com a borda, já olhei outros tópicos mas não consegui achar o erro.

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

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

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

// variaveis do oponente
let xRaqueteOponente = 578;
let yRaqueteOponente = 150;
let velocidadeYOponente;


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  desenhaRaquete(xRaquete,yRaquete);
  movimentaRaquete();
  desenhaRaquete(xRaqueteOponente,yRaqueteOponente);
  movimentaRaqueteOponente();
  colisaoRaqueteBiblioteca();
}

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 desenhaRaquete(x,y) {

  rect(x,y,comprimentoRaquete, alturaRaquete)

}

function movimentaRaquete() {

  if (keyIsDown(UP_ARROW)) {

    yRaquete -= 10;

  }

  if (keyIsDown(DOWN_ARROW)) {

    yRaquete += 10;

  }

}

function movimentaRaqueteOponente() {

  velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 - 30;
  yRaqueteOponente += velocidadeYOponente;

}

function colisaoRaqueteBiblioteca() {
 colidiu =  collideRectCircle(xRaquete,yRaquete,comprimentoRaquete,alturaRaquete,xBolinha,yBolinha,raio);

  if(colidiu) {

  velocidadeXBolinha *= -1;

  }

}
2 respostas

Tem mais código seu?

Pra chamar o tamanho do canvas teria que por o nome da variável.width ou nome.height. Fiz um teste assim:

var tela = document.querySelector('canvas'); console.log(tela.width);

Olá Beatriz,

Acredito que você precisa incluir os parâmetros na função e quando for chamar a função chamar com os parâmetros também, segue o exemplo de como os códigos devem ficar:

verificaColisaoRaquete(xRaquete, yRaquete);

function verificaColisaoRaquete(x, y){
  colidiu = collideRectCircle(x, y,raqueteComprimento,raqueteAltura,
xBolinha,yBolinha,raio);
  if (colidiu){
    velocidadeXBolinha *= -1;
  }
}

Procure por esse mesmo código na sua programação e vai perceber que faltou (x, y) na hora de criar a função e (xRaquete, yRaquete) na hora de chama-la.

Espero ter ajudado. Grande abraço