1
resposta

Bolinha bate no nada e se movimenta para o lado oposto

Minha bolinha muitas vezes bate em uma "parede invisível" no meio do campo e se movimenta para o lado oposto. Não consigo identificar qual é o erro.

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

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

// variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

let colidiu = false;

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

//placar do jogo
let meusPontos = 0;
let pontosDoOponente = 0;


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

function draw() {
  background(0);
  mostraBolinha ();
  movimentaBolinha();  
  verificaBordas ();
  mostraRaquete (xRaquete, yRaquete);
  movimentaMinhaRaquete ();
  verificaColisaoRaquete (yRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete (xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();
}

function mostraBolinha () {
    circle (xBolinha, yBolinha, diametro);
}

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

function verificaBordas (){
  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,comprimentoRaquete,alturaRaquete);
}

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

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

  }

}

function verificaColisaoRaquete(x, y) {
  colidiu =
  collideRectCircle(x, y, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, raio);
  if (colidiu){
    velocidadeXBolinha *=-1;

  }
}

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

}

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

}

function marcaPonto(){
  if (xBolinha >590){
    meusPontos += 1;

  }
  if (xBolinha < 10){
    pontosDoOponente += 1;
  }
}

1 resposta

Oi Steffani!

Na function draw( ), ao referenciar a function verificaColisaoRaquete( ), você colocou duas vezes o yRaquete. Está assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Só mudar para x e y e acredito que você resolve esse problema da "parede invisível" . Vai ficar assim:

  verificaColisaoRaquete (xRaquete, yRaquete);

Testei aqui e deu certo. Mas qualquer coisa avisa que continuamos buscando até achar o bug. ;)