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

Bolinha passando para trás da raquete

Depois de implementar o código e jogar um pouco (copiando ao pé da letra o gabarito), percebi que em algumas raras circunstâncias a bolinha consegue acertar um "ponto cego" e passar para detrás da raquete, às vezes ricocheteando entre a raquete e a borda do canvas várias vezes. Alguma sugestão de onde está o "ponto cego" da lógica?

Ah, implementei um if para evitar que a raquete saia do canvas:

function movimentaMinhaRaquete() { 
// primeiro verifica se a raquete está dentro do canvas:
  if(yRaquete > 0 &&
    yRaquete + alturaRaquete < 400) {
// se true move para cima:
    if (keyIsDown(UP_ARROW)) {
      yRaquete -= 10;    
    };
// ou para baixo:
    if (keyIsDown(DOWN_ARROW)) {
      yRaquete += 10;    
    };
  }
// o que fazer se o jogador tentar ultrapassar o limite do canvas (quando a primeira condição acima passa a ser falsa e trava a raquete):
  if(yRaquete <= 0) {
    yRaquete += 1; }
  if(yRaquete + alturaRaquete >= 400) {
    yRaquete -= 1; }  
}

Gostaria de sugerir, ainda, que fosse enfatizado um pouco mais a necessidade de clicar no canvas para poder jogar. Perdi uns bons minutos quebrando a cabeça até lembrar desse detalhe, revirando meu código de ponta cabeça para descobrir por que a raquete não mexia.

3 respostas

Oi Daniel tudo bem?

Você importou a biblioteca bmoren/p5.collide2D ? Poderia compartilhar conosco o seu projeto p5 .

Sim, importei a biblioteca, mas joguei pouco usando a verificação de colisão dela. Segue meu projeto: https://editor.p5js.org/caibreira/sketches/djmn5xl6a

solução!

O que acontece é que a bolinha fica colidindo várias vezes com a raquete quando pega pelo canto superior ou inferior. Então dá esse ricochete que fica mudando a velocidade. O que dá para fazer é colocar algo que impede o ricochete, que impede de ficar mudando a direção toda hora. Que só mude a direção ao tocar na parede ou na outra raquete.

Entendeu o que tem de fazer?