Я полагаю, ваши весла - прямоугольники? Для простоты предположим, что мяч может ударяться только о поверхность ракетки (то есть не об углы или стороны).
В: Зависит ли это от того, где он попадает на весло? О: Если ракетка представляет собой прямоугольник, выровненный по оси, и мяч может удариться только о ее поверхность, то нет.
В: Имеет ли значение, если весло движется? О: Это ваш выбор. Физика игры — это не настоящая физика, поэтому вы вольны делать все, что делает игру лучше.
Во-первых, вращение мяча на 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
person
erisco
schedule
24.01.2012