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

[Bug] JOGO PONG BUG NO ÁUDIO que não aparece no Terminal

Olá, tudo bem? Aprendendo programação do zero e estou criando o jogo pong, com a ajuda do meu professor show de bola o Gui. Então vamos lá: criei um som diferente para cada raquete, só que se eu deixar rodando o som da raquete1 tem um bug que não consigo identificar e o bug não aparece naquela área terminal. O áudio fica repetindo, em loop. Como se o arquivo tivesse um problema. Já coloquei o mesmo áudio da raquete2 e continua a mesma coisa.

o que será que eu fiz de errado?

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

//Velocidade da Bolinha let velocidadeXBolinha = 5; let velocidadeYBolinha = 5; let raqueteComprimento = 10; let raqueteAltura = 80;

//Variáveis da Raquete Jogador 1 let xRaquete = 7; let yRaquete = 150;

let colidiu = false;

// Placar do Jogo let meusPontos = 0; let pontosDoOponente = 0;

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

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

//Variáveis da Raquete Jogador 2 let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

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

function draw() { background('rgb(0,128,0)'); 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)){ yRaqueteOponente -= 5; } if (keyIsDown(DOWN_ARROW)){ yRaqueteOponente += 5; } }

function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete) velocidadeXBolinha *= -1; raquete1.play(); }

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

function movimentaRaqueteOponente(){ if (keyIsDown(87)){ yRaquete -= 5; } if (keyIsDown(83)){ yRaquete += 5; } }

function incluirPlacar(){ stroke(255); textAlign(CENTER); textSize(25); fill(color(255, 40, 0)); rect(150, 20, 40, 30); fill(255); text(meusPontos, 170, 45); fill(color(255, 40, 0)); rect(450, 20, 40, 30); fill(255); text(pontosDoOponente, 470, 45); }

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

2 respostas
solução!

Olá, Heleno! Parabéns por estar se dedicando a aprender programação do zero e já estar criando um jogo, isso é muito legal!

Pelo que pude analisar no seu código, o problema parece estar na função verificaColisaoRaquete(). Você está tocando o som da raquete1 sempre que essa função é chamada, independente de haver ou não uma colisão. Isso pode estar causando o loop do som que você mencionou.

Para corrigir isso, você deve tocar o som apenas quando a colisão acontecer. Veja como você pode fazer isso:

function verificaColisaoRaquete(){
  if (xBolinha - raio < xRaquete + raqueteComprimento && 
      yBolinha - raio < yRaquete + raqueteAltura && 
      yBolinha + raio > yRaquete){
      velocidadeXBolinha *= -1;
      raquete1.play();
  }
}

Nesse código, eu apenas movi a linha raquete1.play(); para dentro do bloco condicional. Assim, o som só será tocado quando a condição de colisão for verdadeira.

Espero que essa sugestão possa resolver o problema que você está enfrentando. Lembre-se, a prática é muito importante no aprendizado da programação, então continue se esforçando!

Espero ter ajudado e bons estudos!

Obrigado, Renan. Que bom que ajudou. Nossa, como fiquei feliz como a orientação. Agora entendo o que acontece, em programação, quando alguém resolve um problema que você acha que não tem solução e quando alguém mais experiente ajuda, a gente vê que é possível sim e acaba tirando um peso da gente. Estou no início e sei que vou passar por vários desafios. Por enquanto não entendo direito nem o sentido dessa frase "para dentro do bloco condicional", mas com o tempo e empenho da minha parte vou aprender mais e mais. Obrigado mais uma vez, Renan. Um abração.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software