1
resposta

[Bug] Solução que eu encontrei para contornar o BUG da bolinha presa + chance de errar do oponente.

Eu percebi que ele ocorria quando a bolinha tocava na parte superior da raquete e que isso deve ser alguma limitação do JavaScript. Então para contornar o Bug da bolinha eu aumentei em 3 pixels a "área de contato" da raquete, sem aumentar seu "objeto", através da verificação de colisão.

function verificaColisaoRaquete() {
  if (   xBolinha - raioBolinha < xRaqueteEsq + wRaqueteEsq
      && yBolinha + raioBolinha > yRaqueteEsq - 3
      && yBolinha - raioBolinha < yRaqueteEsq + hRaqueteEsq + 3) {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

let taxaDeErro = 0;
function verificaColisaoRaqueteOponente() {
  if (   xBolinha + raioBolinha > xRaqueteDir 
      && yBolinha + raioBolinha > yRaqueteDir - 3
      && yBolinha - raioBolinha < yRaqueteDir + hRaqueteDir + 3) {
    velocidadeXBolinha *= -1;
    raquetada.play();
    taxaDeErro = random(-50, 50);
  }
}

Perceba que eu também coloquei uma variável "taxaDeErro" que toda vez que a raquete defender, ela vai me gerar um número que será incrementado em seu movimento. Aqui:

function movimentoRaqueteOponente() {
  calculaChanceDeErrar();
  velocidadeYOponente = yBolinha - yRaqueteDir -
  hRaqueteDir / 2 - 30;
  yRaqueteDir += velocidadeYOponente + chanceDeErrar + taxaDeErro;
}

Utilizei também uma solução para a bolinha fazendo pontos por trás da raquete aqui do fórum, que ao realizar o ponto, a bolinha volta para a posição à frente da raquete.

function bolinhaPresa(){
    if (xBolinha - raioBolinha < 0){
    xBolinha = 20;
    }
    if (xBolinha + raioBolinha > 600){
    xBolinha = 580;
    }
}

link do p5 >> https://editor.p5js.org/ChicoStuhl/full/A_pcGnLHv

Obs: optei por não utilizar a função de colisão pronta do github.

1 resposta

Olá, Francisco! Tudo certo por aí?

Antes de tudo, agradeço a paciência em aguardar uma resposta.

Fiquei muito encantada com a sua explicação. De verdade, parabéns! Gostei bastante das soluções que você desenvolveu para evitar o problema da bolinha presa atrás da raquete e do oponente invencível.

Além disso, gostaria de dizer que o seu jogo do Pong ficou ótimo! Achei muito bacana o design do projeto e a forma com que o jogo acontece!

Compartilhar os nossos trabalhos é algo super legal para troca de informações e apreensão de novos conhecimentos. Por esse motivo, deixo como sugestão entrar na comunidade da Alura no discord. O pessoal que fica por lá gosta bastante de apresentar suas atividades, estudar e fazer amizades. Abaixo estão os links para saber um pouquinho mais sobre isso:

Caso surjam dúvidas ao longo dos seus estudos na plataforma, sinta-se confortável para enviá-las no fórum. Fico à disposição para te ajudar da melhor maneira possível.

Até mais, Francisco!