당신의 패들이 직사각형이라고 생각하십니까? 간단히하기 위해, 볼은 패들의면 (즉, 모서리 나 측면이 아님)에만 닿을 수 있다고 가정합니다.
Q : 패들의 위치에 따라 달라 지나요? A : 패들이 축 정렬 된 사각형이고 볼이 그 표면에만 닿을 수 있다면 no.
Q : 패들이 움직이는 것이 중요합니까? 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
이것은 gamedev 교환에 속합니다. – erisco