olá pessoal, creio que todos devem ter enfrentado ou enfrentarão o problema da bolinha ficando presa na raquete, tentei diversas soluções e verifiquei algumas sugestões dos colegas, e me baseando na ideia deles resolvi o problema da bolinha presa na raquete de uma forma bastante simples, (não sei se a forma mais correta, porém funcionou), utilizando o "teletransporte" para sempre que a bolinha colidir com a raquete ou com a borda da tela, a bolinha ir para uma posição x logo a frente da raquete. isso fez com que a bolinha não ficasse mais presa. a forma que encontrei para isso foi incluir no próprio comando de colisão da bolinha com a raquete, o valor xBolinha, conforme parte grifada do código abaixo.
function colisiumRect () {
if (xBall - radius < xRect + widthRect && yBall - radius < yRect + heightRect && yBall + radius > yRect) {
***xBall = 35***; speedXBall *= -1;
soundRect.play();
Ou seja, não foi necessário criar uma nova função, ou linha de código, apenas utilizei o código que já escrevemos, para colisão da bolinha com a raquete e inclui a mudança da posição x da bolinha, tanto para o código de colisão da bolinha com a minha raquete, quanto no código de colisão da bolinha com a raquete do oponente, modificando apenas o valor da posição x da bolinha.
function colisiumRect2 () {
if (xBall + radius * 2 > xRect2 + widthRect && yBall - radius < yRect2 + heightRect && yBall + radius > yRect2) {
***xBall = 565***; speedXBall *= -1;
soundRect.play();
}
}
Os valores da posição x da bolinha, foram os que encontrei para o jogo ficar mais fluido e não parecer que a bolinha simplesmente surgiu em um determinado ponto da tela, é possível alterá-lo para ajustar melhor ao código de vocês. Fiz algo semelhante na função de marcar ponto, seguindo a ideia que o Lucas Ruan Messias Silva deixou aqui no fórum, fazendo apenas um pequeno ajuste na ideia que ele desenvolveu.
function score (){
if (xBall > 585)
{myPoint += 1;
soundScore.play(); ***xBall = 565; speedXBall = -1;***
}
if (xBall < 15)
{opponentPoint += 1;
soundScore.play(); ***xBall = 35; speedXBall = -1;***
}
}