ele me forneceu um código diferente para mudar a tragetória, quando bater na ponta inferior ou superior, funcionou certinho, vou deixar aqui caso alguém queira testar:
class Bola {
// ... (restante do código)
verificarColisaoRaquete(raquete) {
if (
this.x - this.r / 2 <= raquete.x + raquete.w / 2 &&
this.x + this.r / 2 >= raquete.x - raquete.w / 2 &&
this.y + this.r / 2 >= raquete.y - raquete.h / 2 &&
this.y - this.r / 2 <= raquete.y + raquete.h / 2
) {
// Calcula a posição relativa da colisão na raquete (entre -1 e 1)
let deltaY = this.y - (raquete.y - raquete.h / 2);
let normalizedDeltaY = deltaY / (raquete.h / 2);
// Define um ângulo máximo para o efeito (em radianos)
const maxAngle = radians(60);
// Calcula o ângulo base com base na posição relativa da colisão
let angle = normalizedDeltaY * maxAngle;
// Inverte a direção horizontal da bola
this.velocidadeX *= -1;
// Aplica o efeito do ângulo na direção vertical da bola
this.velocidadeY = Math.sin(angle) * this.velocidadeX;
// Aumenta a velocidade após a colisão
this.aumentarVelocidade();
}
}
// ... (restante do código)
}