1
resposta

Bolinha rebate varias vezes na raquete e as vezes sai da tela!

Dependendo do ângulo que a bolinha atinge a raquete, ela entra por trás e fica descontrolada ou rebate várias vezes na raquete. Gostaria de saber como evitar multiplos toques ou que ela saia por de trás das raquete.

Quando der play no código com as raquetes na posição inicial, logo que ela vai para o primeiro contato com a raquete adversária o bug ocorre.

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

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


//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

//variáveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

//variáveis placar jogo
let meusPontos = 0;
let pontosOponente = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda(); 
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentoMinhaRaquete();
  //movimentaRaqueteOponente();
  verificaColisaoRaquete();
  verificaColisaoRaqueteOponente();
  incluiPlacar();
  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, raqueteComprimento, raqueteAltura);
}

function movimentoMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}

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

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

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

function incluiPlacar(){
  fill(255)
  text(meusPontos, 278, 26);
  text(pontosOponente, 321, 26)
}

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

Olá, Davi! Como você está?

Parabéns pela construção do projeto e também conclusão do curso.

Esse bug surge mesmo em alguns momentos do jogo e alguns alunos aqui da Alura pensaram em uma solução, vou deixar os links aqui para você consultar, certo?

Espero que as informações tenham ajudado, fico à disposição!

Um abraço e bons estudos!