1
resposta

[Sugestão] Bolinha presa na Raquete

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;***
 }
}
1 resposta

Olá, Alessandro! Como vai?

Muito obrigado por compartilhar sua solução para o problema da bolinha presa na raquete. É sempre bom ver que a comunidade está trabalhando junta para encontrar soluções criativas e eficientes.

Sua solução parece bastante simples e eficaz. É ótimo ver que você conseguiu resolver o problema com a inclusão da sua lógica ao código, a ideia de "teletransportar" a bolinha para uma posição x logo à frente da raquete foi certeira e certamente ajudará a tornar o jogo mais fluido.

Agradeço por compartilhar também os valores que você usou para a posição x da bolinha, isso pode ser útil para outros estudantes que estejam enfrentando o mesmo problema.

Parabéns pela solução e continue assim, sempre buscando soluções criativas e eficientes para os desafios que surgem. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!