1
resposta

bolinha presa entre a borda e raquete

Estou tento o mesmo problema que vi outras pessoas tendo, até vi suas soluções, mas n entendi realmente o que preciso mudar no meu código para parar com ese bug. Algumas vezes em que a bolinha bate na minha raquete, ela fica "presa", quicando na raquete e na borda, até q sai... vou deixar meu código aqui embaixo:

//variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 15;
let raioBolinha = diametroBolinha / 2;
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//variaveis raquete jogador e oponente
let xRaqueteJogador = 5;
let yRaqueteJogador = 150;

let raqueteComprimento = 10; 
let raqueteAltura = 90;

let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeRaqueteOponente;

// variavel para verificar se a bolinha colide com a raquete
let colidiu = false;

// placar do jogo
let pontosJogador = 0;
let pontosOponente = 0;


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisaoComBordas ();
  mostraRaquete(xRaqueteJogador, yRaqueteJogador);
  movimentaRaqueteJogador();
  colisaoRaquete(xRaqueteJogador,yRaqueteJogador);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  colisaoRaquete(xRaqueteOponente,yRaqueteOponente);
  movimentaRaqueteOponente();
  incluirPlacar();
  pontuacao();
}

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

function movimentaBolinha (){
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

function colisaoComBordas () {
  if (xBolinha - raioBolinha < 0 || xBolinha + raioBolinha > width ) {
    velocidadeXBolinha *= -1;
  }
  if (yBolinha - raioBolinha < 0 || yBolinha + raioBolinha > height) {
    velocidadeYBolinha *= -1;
  }
}

function mostraRaquete (x,y) {
  rect(x, y, raqueteComprimento, raqueteAltura);
}

function movimentaRaqueteJogador() {
  if (keyIsDown (UP_ARROW)) {
    yRaqueteJogador -= 10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaqueteJogador += 10;
  }
}

function movimentaRaqueteOponente () {
  velocidadeRaqueteOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 -30;
  yRaqueteOponente += velocidadeRaqueteOponente;

}

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

function incluirPlacar () {
  fill (255);
  text(pontosJogador, 278,26);
  text(pontosOponente, 321, 25);
}

function pontuacao () {
  if (xBolinha + raioBolinha >= 600) {
    pontosJogador += 1;
  }
  if (xBolinha - raioBolinha <= 0) {
    pontosOponente += 1;
  }
}
1 resposta

Olá, Júlia! Tudo bem contigo?

Desculpe a demora em dar um retorno

Veja essa solução desenvolvida pelo Roger Roberto que acredito que vai te ajudar ou até mesmo dar outras ideias de implementação.

Fico no aguardo para sabermos se deu tudo certo

Um abraço