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

[BUG] Marcando 3 pontos por vez

Depois que eu adicionei o som, o placar passou a contabilizar 3 pontos e não 1

//Variáveis da Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro /2;

//Variavéis da Raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

//Variavéis do Oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

//Placar do jogo
let meusPontos = 0;
let oponentePontos = 0;

//Sons do jogo
let raquetada;
let ponto;
let trilha;

function preload(){
  trilha = loadSound("trilha.mp3");
  ponto = loadSound ("ponto.mp3");
  raquetada = loadSound ("raquetada.mp3");
}



let colidiu = false;

//Variáveis da velocidade da Bolinha
let velocidadeXBolinha = 3;
let velocidadeYBolinha = 4;

function setup() {
  createCanvas(600, 400);
  trilha.loop();

}

function draw() {
  background(0);
  mostraBolinha();
  movimentoBolinha();
  colisaoBolinha ();
  mostraRaquete(xRaquete, yRaquete);
  movimentoRaquete();
  //colisaoRaquete();
  VerificaColisaoRaquete(xRaquete, yRaquete);
  VerificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  MovimentoRaqueteOponente();
  incluiPlacar();
  marcaPonto();

}

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

function movimentoBolinha(){
    xBolinha += velocidadeXBolinha;
    yBolinha += velocidadeYBolinha;

}

function colisaoBolinha(){
   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 movimentoRaquete(){
  if(keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if(keyIsDown(DOWN_ARROW)){
    yRaquete +=10
  }
}

function colisaoRaquete(){
 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
     raquetada.play();

   }
}

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

}

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill (color(255,140,0));
  rect(150, 10, 40, 20);
  fill (255);
  text (meusPontos, 170,26);
  fill (color(255,140,0));
  rect(450, 10, 40, 20);
  fill (255);  
  text (oponentePontos, 470, 26); 
}

function marcaPonto(){
  if (xBolinha > 590){
    meusPontos +=1
    ponto.play();
  }
  if (xBolinha < 10){
    oponentePontos+=1
    ponto.play();
  }
}
3 respostas
solução!

Boa noite Willian, tudo bem?

Normalmente os pontos não tem relação com o som e sim colisão.

Eu recomendaria testar valores diferentes na função que valdia os pontos:

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

No meu caso o que funcionou foram "xBolinha > 598" e "xBolinha < 2".

Abraço!

Muito Obrigado! Eu não usei "xBolinha > 598" e "xBolinha < 2", mas mudei as coordenadas até achar um valor que funcionasse!

Muito legal saber que deu certo!

Por favor, marque este tópico como "RESOLVIDO" para que outras pessoas possam aproveitar a resposta caso tenham a mesma dúvida.

Abraço!