1
resposta

[Bug] Projeto Pong bola travando.

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

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

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

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

let colidiu = false;

//placar do jogo
let meusPontos = 0;
let pontosDoOponente =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); // Desenha o background
  mostraBolinha(); 
  movimentaBolinha(); 
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente,yRaqueteOponente);
  incluirPlacar();
  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 movimentaMinhaRaquete(){ 
    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;
    raquetada.play();
  }
}

function verificaColisaoRaquete(x, y){
  colidiu =
  collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
  if (colidiu){
     velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

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

function calculaChanceDeErrar() {
  if (pontosDoOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

function incluirPlacar(){
  stroke (255);
  textAlign(CENTER);
  textSize (16);
  fill(color (255, 20, 147));
  rect(250, 10, 40, 20);
  fill(255);
  text(meusPontos, 270, 26);
  fill(color (255, 20, 147));
  rect(350, 10, 40, 20);
  fill(255);
  text(pontosDoOponente, 370, 26);
}

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

Olá, Tudo bom?

Desde já, peço perdão pela demora em retornar.

Após analisar e testar o código que você compartilhou, não identifiquei problemas com relação à bolinha. Observe:

Gif. Tela do p5.js em execução. A tela mostra uma partida de Pong no p5.js. A imagem animada tem fundo preto. Na parte superior da tela há dois quadrados cor-de-rosa com o número zero em seus interiores, representando o placar dos jogadores. Na lateral esquerda da tela há um retângulo branco, que indica a raquete do jogador; esta raquete se movimenta verticalmente. Na lateral direita da tela, há outro retângulo branco, representando a raquete do oponente; ela também realiza movimentos verticais.

O único ponto percebido foi a falta de uma barra no comentário acerca das variáveis da bolinha, o qual precisa conter, na realidade, duas barras. Abaixo, há o código com a alteração:

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

Caso o problema continue, sugiro compartilhar o seu sketch para que possamos analisar o seu projeto de forma mais assertiva. A seguir estão os passos para isso:

  • Localizar a barra superior com os itens “File”, “Edit”, “Sketch”, e “Help” (em Português, as opções seriam: “Arquivo”, “Editar”, “Esboço” e “Ajuda”, respectivamente);
  • Clicar em “File”;
  • Selecionar a opção “Share” ou “Compartilhar”;
  • Copiar o link da terceira opção da lista (de cima para baixo);
  • Colá-lo em seu tópico do fórum.

Outra maneira de fazer isso é selecionando, copiando e colando a url do seu Sketch!

Estarei à disposição para te ajudar!

Grande abraço e até mais.

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