Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Em algumas situações a bolinha ultrapassa a borda.

Eu jogo o jogo normalmente mas em algumas situações do game a bolinha ultrapassa a borda e computa mais pontos para o adversário. Segue o código completo:

// variáveis da bolinha
let xbolinha = 400
let ybolinha = 200
let diametro = 30
let velocidadexbolinha = 8
let velocidadeybolinha = 8
let raio1 = diametro/2
let raio2 = diametro/-2

//variáveis raquete
let xraquete = 10
let yraquete = 150
let larguraraquete = 10
let alturadaraquete = 90
let velocidaderaquete = 7

//variáveis raquete oponente
let xraqueteoponente = 580
let yraqueteoponente = 150
let larguraraqueteoponente = 10
let alturadaraqueteoponente = 90
let velocidadeyraqueteoponente;

//placar
let meuspontos = 0;
let pontosdooponente = 0;
let chancedeerrar = 45;

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

function draw() {
  background(0);
  mostrarbolinha();
  movimentarbolinha();
  verificarbordas();
  mostrarraquete(xraquete, yraquete);
  mostrarraquete(xraqueteoponente, yraqueteoponente);
  movimentaraquete();
  movimentaraqueteoponente();
  colisaodaraquetenabolinha();  
  colisaodaraqueteoponentenabolinha();
  placar();
  fill (255);
}

function mostrarbolinha(){
  circle(xbolinha,ybolinha,diametro)
}

function movimentarbolinha(){
  xbolinha += velocidadexbolinha
  ybolinha += velocidadeybolinha
}

function verificarbordas(){
  if (xbolinha + raio1 > width  || xbolinha + raio2 < 0){
    velocidadexbolinha *= -1;
}
  if(ybolinha + raio1 > height || ybolinha + raio2 < 0){ 
  velocidadeybolinha *= -1;
  }
}

function mostrarraquete(x,y){
  rect(x, y, larguraraquete, alturadaraquete)
}

function movimentaraquete(){
  if(keyIsDown(UP_ARROW)){
    yraquete -= 1 * velocidaderaquete;
  }
  if(keyIsDown(DOWN_ARROW)){
    yraquete += 1 *velocidaderaquete;
}
}

function movimentaraqueteoponente(){
  velocidadeyraqueteoponente = ybolinha -yraqueteoponente - larguraraqueteoponente/2 - 30;
  yraqueteoponente += velocidadeyraqueteoponente + chancedeerrar
}

function colisaodaraquetenabolinha(){
if (xbolinha - raio1 < xraquete +larguraraquete && ybolinha - raio1 < yraquete + alturadaraquete && ybolinha -raio1 > yraquete){
  velocidadexbolinha *= -1;
}
}

function colisaodaraqueteoponentenabolinha(){
if (xbolinha + raio1 > xraqueteoponente + larguraraqueteoponente && ybolinha - raio1 < yraqueteoponente + alturadaraqueteoponente && ybolinha +raio1 > yraqueteoponente){
  velocidadexbolinha *= -1;
}
}

function placar(){
  fill(color(128,0,0));
   rect (258,11,40,25);
   fill(255);
  textSize(15);
  text(meuspontos,271,30);
  fill(color(128,0,0));
   rect (358,11,40,25);
  fill(255);
  textSize(15);
  text(pontosdooponente,371,30);

  if (xbolinha > 590){
    meuspontos += 1;
  }
  if(xbolinha< 10){
    pontosdooponente += 1;
  }
}
2 respostas

Oi, boa tarde Graziele,

Vou dar umas dicas com base no que eu criei e desenvolvi para corrigir esse bug( que é comum para todos ). 1ª dica, tenta usar a biblioteca do Sketch : p5.collide2d.js , no curso ele cita essa biblioteca, vai facilitar sua vida ao usar a função de colisão, mas nao é obrigatório. 2ª Se vc não chegou ainda ao final do curso, ele da algumas dicas de como melhorar suas funções de colisão. 3ª seu código para pontuar esta dentro da função placar. tenta fazer separado , criar uma nova função para marcar pontos e não esqueça de adicionar essa função a função principal do projeto (Draw).

solução!

Obrigada pela dica Bruno! Vou ajustar esses detalhes mas eu vi e o bug estava por conta do tamanho da bolinha ser muito grande, então diminui um pouco e o jogo rodou normalmente.