3
respostas

som do ponto tocando sem parar

//Variaveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;
let raio = diametro /2;

//Variaveis da raquete
  let xRaquete = 5;
  let yRaquete = 150;
  let comprimentoRaquete = 08;
  let alturaRaquete = 90;

// Variaveis do oponente
  let xRaqueteOponente = 585;
  let yRaqueteOponente = 150;
  let velocidadeyOponente;

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

// Trilha sonora
  let = raquetada;
  let = ponto;
  let = jogo;

function preload(){
  jogo = loadSound("trilha.mp3");
  raquetada = loadSound("raquetada.mp3");
  ponto = loadSound("ponto.mp3");
}
function setup() {
  createCanvas(600, 400);
  jogo.loop();
}

function draw() {
  background(0);
  mostraBolinha();
  movimentoBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentoRaquete();
  verificaColisaoRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente );
  movimentoRaqueteOponente();
  verificaColisaoRaqueteOponente();
  incluiPlacar();
  marcaPonto();
}
function mostraBolinha(){
  circle(xBolinha, yBolinha, diametro);
  
}
function movimentoBolinha(){
  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, comprimentoRaquete, alturaRaquete);
     
}

function movimentoRaquete(){
  if (keyIsDown(UP_ARROW)) {
    yRaquete -= 10;
  }
    if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 10;
  }
}
function  verificaColisaoRaquete(){
  if (xBolinha - raio <  xRaquete + comprimentoRaquete && 
      yBolinha - raio < yRaqueteOponente + alturaRaquete && 
      yBolinha + raio > yRaquete){
    velocidadexBolinha *= -1;
    raquetada.play();
}
}

function  verificaColisaoRaqueteOponente(){
  if (xBolinha + raio >  xRaqueteOponente  && 
      yBolinha - raio < yRaqueteOponente + alturaRaquete && 
      yBolinha + raio > yRaquete){
    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(pontosDoOponente, 470, 26);
}

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

Olá, Caique! Como vai?

Pelo que percebi, o som do ponto está tocando sem parar porque você está chamando a função ponto.play(); fora das condicionais que verificam se um ponto foi marcado.

No trecho do seu código:

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

A função ponto.play(); está sendo chamada independentemente do resultado das condições if (xBolinha > 590) e if (xBolinha < 11). Isso ocorre porque em JavaScript, se você não usar chaves {} após o if, apenas a próxima linha de código será considerada parte da condição.

Para corrigir isso, você deve incluir as chaves {} após o if, assim:

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

Dessa forma, a função ponto.play(); será chamada apenas quando um ponto for marcado, ou seja, quando xBolinha > 590 ou xBolinha < 11.

Espero ter ajudado e bons estudos!

Oii, Caique! Tudo bem?

Antes de tudo gostaria de parabenizá-lo por colocar em prática todos os desafios das aulas, isso contribui muito para o seu desenvolvimento técnico.

Complementando ao que o Renan sugeriu, que é um ótimo ponto de observação, recomendo que se atente às declarações das variáveis de som, vejamos:

  • Ao declarar as variáveis de som, olet não é necessário o uso do sinal de igual =. Então sugiro que retire o sinal, deixando como no exemplo:
let ponto;
let raquetada;
let jogo;

Feito isso, salve o jogo e teste novamente para observar se o código se comporta como esperado.

Espero que dê certo. Continue interagindo no fórum compartilhando suas dúvidas, projetos e sugestões.

Bons estudos, Caique!

Muito Obrigado !!!