Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] bolinha n colide com a borda por cima da raquete

//varíaveis balinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2 ;

//velocidade da bolinnha
let velocidadeXBolinha = 7;
let velocidadeYBolinha = 7;

//varíaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

//varíaveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let chanceDeErrar = 0;

//placar do jogo
let meusPontos = 0
let pontosOponente = 0

//sons do jogo
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(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente)
  movimentaRaqueteOponente();
  verificaColisaoRaqueteOponente();

  incluiPlacar();
  marcaPonto();
  bolinhaNaoFicaPresa();
}

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, raqueteComprimento, raqueteAltura)
}

function movimentaMinhaRaquete(){
  if (keyIsDown(87)){
    yRaquete -= 10;
  }
   if (keyIsDown(83)){
    yRaquete += 10;
  }
}



function verificaColisaoRaquete(){ 
  if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio < yRaquete + raqueteAltura){ velocidadeXBolinha *= -1; 
  raquetada.play();                                                                                                                       
  }
}

function verificaColisaoRaqueteOponente(){ 
  if (xBolinha + raio > xRaqueteOponente && yBolinha + raio < yRaqueteOponente + raqueteAltura && yBolinha + raio > yRaqueteOponente - raqueteAltura) { velocidadeXBolinha *= -1;  
   raquetada.play();                                                                                                                                                   
  } 
}



function movimentaRaqueteOponente(){
 if (keyIsDown(UP_ARROW)){
    yRaqueteOponente -= 10;
  }
   if (keyIsDown(DOWN_ARROW)){
    yRaqueteOponente += 10;
  }
}



function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255, 140, 0));
  rect(150, 10, 40, 20);
  fill(255);
  text(meusPontos, 170, 26);
   fill(color(255, 140, 0));
  rect(450, 10, 40, 20);
  fill(255);
  text(pontosOponente, 470, 26);
}


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

function bolinhaNaoFicaPresa(){
    if (xBolinha - raio < 0){
    xBolinha = 23
    }
}
1 resposta
solução!

Olá Vitor, tudo bem? Espero que sim!

O problema em relação à colisão da bolinha com a borda por cima da raquete ocorre devido a um erro na verificação da colisão. No trecho de código responsável por essa verificação, é necessário ajustar as condições das coordenadas Y para verificar se a bolinha está acima da raquete em vez de abaixo.

Aqui está o código corrigido para a função verificaColisaoRaquete:

function verificaColisaoRaquete() {
  if (xBolinha - raio < xRaquete + raqueteComprimento &&
      yBolinha + raio > yRaquete &&
      yBolinha - raio < yRaquete + raqueteAltura) {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

Espero ter ajudado!

Caso tenha dúvidas, fico à disposição.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!