4
respostas

Bug na bolinha

Após mudar as cores do placar e diminuir o tamanho da bolinha dei play e a bolinha fica fazendo zigue-zague no centro da tela, revi todos os códigos e parece estar tudo certo.

https://editor.p5js.org/everyline/full/FHJuSNMmW

4 respostas

Olá, Bruno! Tudo bom?

O erro ocorreu porque você chamou duas vezes a function verificaColisaoRaquete(). Além disso, sugiro que você diferencie as funções que utilizam a biblioteca para evitar conflitos no código.

Para resolver o problema inicial, basta comentar a primeira verificaColisaoRaquete() na draw(), pois assim ela não será chamada pelo p5.js

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda(); 
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoRaquete(); se você comentar bem aqui,  o código funciona normalmente
  verificaColisaoRaquete(xRaquete,yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente ();
  verificaColisaoRaquete (xRaqueteOponente, yRaqueteOponente);
  incluiPlacar ();
  marcaPonto ();
   }

Espero que tenha ajudado!

Um abraço e bons estudos!

Oi, Camila. Desculpa, ainda não entendi.

https://editor.p5js.org/everyline/full/FHJuSNMmW

https://editor.p5js.org/everyline/sketches/FHJuSNMmW

Inclusive acho que ocorreu algum erro relacionado ao som. Agradeço pela ajuda!

Oi, Bruno!

Você deixou duas funções com o mesmo nome sendo chamadas na draw(). O p5.js vai ler todos eles e tentar rodá-los, e é por isso que o erro acontece.

Funciona como se você estivesse em uma sala com mais duas pessoas chamadas bruno, se alguém gritar da porta "-Bruno, vem aqui agora!", todos os brunos irão olhar e vão se dirigir até a porta, correto?

Então como podemos diferenciar os Brunos? Uma sugestão é pelo sobrenome, se alguém chamar "Bruno Oliveira", você já não irá. Mas se chamar Bruno Larocca, você irá até a porta.

JavaScript funciona da mesma maneira mas é um pouco mais restrito, porque máquinas e computadores precisam receber instruções diretas e se houver nomes iguais para coisas diferentes, o erro acontece.

Para solucionar o problema, modifique o nome da função em que você utiliza a biblioteca collide para verificaColisaoRaqueteBiblioteca

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

Em seguida, vá na function draw() e comente a primeira chamada de função verificaColisaoRaquete e depois modifique o nome das outras duas para verificaColisaoRaqueteBiblioteca, pois assim impede que haja conflitos.

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda(); 
  mostraRaquete(xRaquete, yRaquete);
  //verificaColisaoRaquete();
  verificaColisaoRaqueteBiblioteca(xRaquete,yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaqueteBiblioteca(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar ();
  marcaPonto ();
   }

Espero que tenha ajudado!

Abraços!