Полагаю, ваши весла - это прямоугольники? Для простоты предположим, что мяч может ударить только по поверхности лопатки (то есть не по углам и не по бокам).
В: Зависит ли это от того, где он ударяет по веслу?
A: Если лопатка представляет собой выровненный по оси прямоугольник, и мяч может ударить только о его поверхность, то нет.
В: Имеет ли значение, если весло движется?
A: Это ваш выбор. Физика игры не настоящая физика, поэтому вы можете делать все, что делает игру лучшей.
Во-первых, вращение шара на 90 градусов не позволяет точно отклонить шар от стены. Рассмотрим крайний случай, когда мяч попадает в стену. Если бы я повернул шар на 90 градусов, то шар двигался бы параллельно стене.
Я верю в то, что вы в настоящее время делаете, и просто немного запутанно заявил, что если мяч ударяется о вертикальную стенку, вы меняете горизонтальное направление мяча. Это, конечно, не эквивалентно повороту шара на 90 градусов.
Если бы я хотел передать скорость от весла к мячу, я бы рассматривал движение мяча как вектор, а движение весла как вектор. Затем я бы добавил эти два вектора вместе. Чтобы контролировать, какая скорость передается мячу, я бы использовал коэффициент (назовем его k
), и если шар должен поддерживать постоянную скорость, я бы нормализовал вектор конечной скорости мяча (но так как вы сохраняют скорость вместо компонентов x, y, в этом нет необходимости).
if (ball hits paddle):
k = 0.5;
// paddle only moves horizontally, which simplifies the math
paddle_vx = paddle_speed * paddle_xdirection;
ball_vx = cos(ball_direction) * speed + k*paddle_vx;
ball_vy = - sin(ball_direction) * speed // flips from the collision
ball_direction = atan2(ball_vy, ball_vx);
ball_speed = 100; // always constant