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

Bolinha fica tremendo no meio da tela (Sem bibliotéca)

Boa noite, tudo bem? Não estou usando a bibliotéca, porém minha bolinha fica tremendo e desendo e subindo

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

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

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

//variaveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);


}

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, raqueteComprimente, raqueteAltura);

}


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

function verificaColisaoRaquete(x, y){

  if(xBolinha - raio < x + raqueteComprimente
     && yBolinha - raio < y + raqueteAltura
     && yBolinha + raio > y){
      velocidadeXBolinha *= -1;  
     }

}

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

}
1 resposta
solução!

Olá Anderson,

Seu problema ocorre quando você chama verificaColisaoRaquete para a raquete do oponente. Em especifico na lógica (xBolinha - raio < x + raqueteComprimente) do if. No inicio do programa o código vai executar o seguinte:

let xRaqueteOponente = 585;
let xBolinha = 300;
let diametro = 25;
let raio = diametro / 2 ;
let raqueteComprimente = 10;

xBolinha - raio < x + 10
300 - (25 / 2) < 585 + 10
300 - 12.5 < 595
287.5 < 595 //resultado true, 287.5 é menor que 595.

Essa lógica vai se repetir infinitamente, pois a cada frame a velocidade da bolinha é invertida e ela sempre vai estar em x < 595.

Nesse caso você vai ter que criar uma função especifica para verificar a colisão com a raquete do oponente ou utilizar o p5.collide.

Espero ter ajudado.