Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Solução bug bolinha bate entre a borda e a raquete várias vezes

Pessoal, procurei vários tópicos aqui sobre essa questão da bolinha bater entre a borda e a raquete e já estava intrigado desde o projeto no scratch, pois estava acontecendo várias vezes comigo.

A solução que eu encontrei foi verificar a direção da bolinha (se velocidade negativa - esquerda | se velocidade positiva - direita) e colocar junto ao if da colisão, assim garanto que ela vai bater na raquete apenas uma vez.

Assim mudei a função e não passo parâmetros:

function verificaColisao(){
    colidiu= collideRectCircle(xRaquete,yRaquete, wRaquete,hRaquete, xBolinha,yBolinha,raio);
    if(colidiu && velocidadeXBolinha < 0) velocidadeXBolinha *= -1;
    colidiu = collideRectCircle(xRaqueteOponente,yRaqueteOponente, wRaquete ,hRaquete, xBolinha,yBolinha,raio);
    if(colidiu && velocidadeXBolinha > 0) velocidadeXBolinha *= -1;

//wRaquete = largura da raquete
//hRaquete = altura da raquete
}

é possível ainda criar uma variável pra direção e aí então passar como uma variável.

E para garantir que a bolinha bateu na borda, também confiro se (xBolinha == 0 + raio) para pontos do oponente e (xBolinha == width - raio) para meus pontos, no lugar de usar > e <.

Testei várias vezes e não obtive o bug novamente.

1 resposta
solução!

Opa, João!!!

Nós agradecemos o compartilhamento do seu código.

Tenho certeza que vai ajudar muito a todos!!!

Nós já conseguimos solucionar alterando valores, mas sua ideia foi muito boa ;-)

Bons estudos e vamos em frente!

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