1
resposta

BOLINHA "RICOCHETEIA"

Prezados, às vezes, do lado do jogador, ao pegar a bolinha "por cima" ou "por baixo" da raquete, a mesma não muda a direção e acaba "ricocheteando" na própria raquete.

Poderiam me ajudar a verificar o que ocorre? Segue meu código. (travei a trilha sonora

//variáveis da bolinha

let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let velocidadeYBolinha = 3;
velocidadeXBolinha = 3;
raio = diametro / 2;

//variáveis da raquete
let xRaq = 5;
let yRaq = 150;
let lRaq = 10;
let hRaq = 90;

//variáveis do oponente
let xRaqOponente = 585;
let yRaqOponente = 150;
let velocidadeYOponente;
let chanceErrar = 0;

//Placar do Jogo
let meuspontos = 0;
let pontosoponente = 0;

//SonsdoJogo
let raquetada;
let ponto;
let trilha;

function preload() {
  //trilha = loadSound ("trilha.mp3")
  ponto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3");
}
function setup() {
  createCanvas(600, 400);
  //trilha.loop()
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaq, yRaq);
  movimentaRaquete();
  verificaColisaoRaquete();
  verificaColisaoRaqueteOponente();
  mostraRaquete(xRaqOponente, yRaqOponente);
  movimentaRaqueteOponente();
  incluirPlacar();
  marcaPonto();
}

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 mostraRaquete(x, y) {
  rect(x, y, lRaq, hRaq);
}

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

function verificaColisaoRaquete() {
  if (
    xBolinha - raio <= xRaq + lRaq &&
    yBolinha - raio <= yRaq + hRaq &&
    yBolinha + raio > yRaq
  ) {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function verificaColisaoRaqueteOponente() {
  if (
    xBolinha + raio >= xRaqOponente + lRaq &&
    yBolinha + raio > yRaqOponente - hRaq &&
    yBolinha + raio > yRaqOponente
  ) {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function movimentaRaqueteOponente() {
  velocidadeYOponente = yBolinha - yRaqOponente - hRaq / 2;
  yRaqOponente += velocidadeYOponente + chanceErrar;
  calculaChancedeErrar();
}

function incluirPlacar() {
  textAlign(CENTER);
  textSize(16);
  stroke(255);
  fill(color(255, 140, 0));
  rect(130, 10, 40, 20);
  rect(430, 10, 40, 20);
  fill(255);
  text(meuspontos, 150, 26);
  text(pontosoponente, 450, 26);
}

function marcaPonto() {
  if (xBolinha > 590) {
    meuspontos += +1;
    ponto.play();
  }
  if (xBolinha < 10) {
    pontosoponente += +1;
    ponto.play();
  }
}

function calculaChancedeErrar() {
  if (pontosoponente >= meuspontos) {
    chanceErrar += 1;
    if (chanceErrar >= 39) {
      chanceErrar = 40;
    }
  } else {
    chanceErrar -= 1;
    if (chanceErrar <= 35) {
      chanceErrar = 35;
    }
  }
}

`

1 resposta

Não sei se vai dar certo, mas na sua função verificaColisãoRaquete, tenta remover os =, deixa as verificações utilizando apenas maior(>) ou menor(<). Caso não de certo, coloca o link do p5 fazendo um favor. Valeu.