Java에서 상당히 간단한 2D 충돌 감지를 구현하고 있는데, 표면 (또는 히트 상자의 측면)에서 충돌이 발생했는지 파악하는 방법에 약간의 걸림돌이 있습니다.충돌이 발생한 쪽을 어떻게 확인할 수 있습니까?
이 사이트에있는 질문을 통해보고 다른 곳에서 광범위한 구글-FU를 시도하고 가장 가까운 나를 이런 식으로 뭔가이었다이라도했습니다
public Side getCollisionSide(Rectangle main, Rectangle incoming) {
boolean toTheLeft = main.getX() - incoming.getX() < 0;
boolean toTheTop = main.getY() - incoming.getY() < 0;
// ...but what can I do from here?
}
문제는이 실제로 제공하지 않는다는 것입니다 어느 쪽이 충돌했는지. 어떤 쿼드 충돌이 발생했는지, 원점이 main
의 좌표로 설정된 그리드에서 알 수 있습니다. 그러나 객체가 왼쪽에서 main
에 도달하면 (그리고 Y 축의 필드에서 더 낮아짐) 충돌이 왼쪽에서 발생했는지 아니면 아래에서 발생했는지를 알 수 없습니다.
누구나 해결책을 알고 있습니까?
나는 속도와 방향 정보를 갖는 것이 어떻게 유익 할 수 있는지를 본다 (또는 객체가 한 번에 한 차원 만 움직일 수있는 경우에도 해결책이 될 수있다). 그러나 사물이 대각선으로 움직일 수 있다면 같은 문제를 피할 수있는 방법은 없습니다.
1에서 충돌하는 사각형을 쉽게 알 수 있습니다. 한 방향으로 하나의 픽셀 만 움직이는 것이 아니라면, 어떻게 든 속도를 가져와야합니다. 그렇지 않으면 방금 두 개의 사각형의 단일 인스턴스 스냅 샷을 처리하는 것입니다. –
답변 해 주셔서 감사합니다. 나는 속도/방향 정보가 확실히 도움이되는 방법을 보았습니다, 그러나 이것은 객체가 한 번에 하나의 차원을 가로 질러 움직일 수있는 해결책 인 것 같습니다. 대각선 방향으로 움직이는 물체 (또는 한 번에 두 방향으로 움직이는 물체)의 경우 같은 문제가 계속 발생합니다. – asteri
그래서 xVelocity와 yVelocity를 넣어 두었습니다. 이것은 2D 충돌을위한 것이라고 말했으므로 속도에 2 가지 구성 요소가 필요합니다. 2D에서의 속도는 2 개의 숫자로 표현 될 수 있습니다. – NickJ