Olá, João!
Pelo que eu posso ver, a lógica de detecção de colisão que você está usando pode estar causando a bolinha a reverter sua direção antes de realmente "encostar" na raquete. Isso pode ser devido à maneira como você está calculando a colisão.
No seu código, você está verificando se a borda esquerda da bolinha (xBolinha - diametro) é menor que a borda direita da raquete (xRaquete + comprimentoRaquete). No entanto, acho que você deveria verificar se a borda direita da bolinha (xBolinha + diametro) é maior que a borda esquerda da raquete (xRaquete). Além disso, você também precisa verificar se a bolinha está dentro dos limites verticais da raquete.
Aqui está uma sugestão de como você poderia modificar sua função:
function verificaColisaoRaquete(){
colidiu =
(xBolinha + diametro > xRaquete && yBolinha + diametro > yRaquete && yBolinha - diametro < yRaquete + alturaRaquete)
if (colidiu){
velocidadeXbolinha *= -1;
}
}
Quanto à bolinha ficar presa entre a raquete e a borda da tela, isso pode estar acontecendo porque a bolinha está invertendo sua direção repetidamente quando está nessa posição. Uma possível solução seria adicionar uma verificação para garantir que a bolinha só pode inverter sua direção uma vez após colidir com a raquete.
Espero ter ajudado e bons estudos!