2012-01-03 6 views
1

나는 조금 놀고 나중에 프로젝트를 위해 몇 가지 일을하려고하지만 해결책을 찾을 수없는 문제가 있습니다.충돌 감지 및 수신 거부

지금 당장 나는 정확한 충돌 감지를하고 있지만 문제는 물리학을 만드는 것입니다. 물리학은 현재 간단합니다. 객체는 방향과 속도에 대한 벡터를 가지고 있습니다. 충돌이있을 때 벡터가 반전됩니다.

문제는 물체가 충돌 할 때 서로 얽혀서 벡터를 반전시켜 이상한 결과를 초래한다는 것입니다. 예 : 마술처럼 위쪽으로 떠오르거나 물리학을 완전히 무시한 것처럼 보입니다.

누구든지 도와 줄 수 있습니까?

편집 : 감지는 축 정리를 분리하여 수행되며 코드를 놓지 않았습니다. 왜냐하면 실제로 진행되는 모든 작업은 충돌이 있는지 확인하기위한 루프가 있기 때문입니다. 벡터가 반전되면 발견됩니다. 내가 말했듯이, 실제 탐지가 잘 작동한다고 Sibbo가 물체를 움직이면서 더 이상 충돌하지 않도록 내 문제를 생각합니다.

+2

더 구체적인 질문을하고 간결한 코드 예제를 통해 도움을 받으십시오. 지금은 질문이 너무 모호합니다. – Gray

답변

1

구현을 잘 모르겠지만 충돌을 감지하면 더 이상 접촉하지 않도록 객체를 이동해야합니다. 이렇게하면 프로그램이 무한 충돌 루프에 들어 가지 않게됩니다.

+1

그게 내가 할 일이야 :) 타이 – SpaceFace

1

속도 벡터를 반전시킬뿐만 아니라 (충돌 임계 값을 벗어나서) 객체를 약간 멀리 이동하십시오. 위치에 벡터를 사용한다고 가정하면, 객체가 더 이상 충돌하지 않는 것으로 간주되도록 값을 변경하면됩니다.

0

각 개체는 크기가 있어야하며 서로의 가장자리에서 튀어 나오면 두 개체 사이의 선을 두 초로 줄입니다. 모든 물체에 같은 질량이 있다고 가정합니까?

1

저는 최근에 대학 프로젝트 용 billard 게임을위한 물리학을 작성했습니다. (이것은 아마도 업계 표준에 맞는 코드가 아니지만 그것이하는 일을합니다). 무한 루프가 동일한 충돌의 결과를 계산하는 것을 막기 위해 우리가 끝낸 것은 다음과 같습니다. 모든 충돌을 java.util.List에 저장했으며 다음 충돌이 계산 될 때마다 충돌에 참여하는 두 객체가 모두 있는지 확인했습니다 이미 계산 된 마지막 충돌의 일부였다. 이 경우 해당 객체 쌍이 무시됩니다.

위쪽과 아래쪽이 있습니다. (최소한의) 오프셋 동작을 사용하여 부정확 한 부분이 생기지 않아 개체가 더 이상 만지지 않습니다. 단점은 두 개의 동일한 객체 사이에 충돌이 두 번있을 수 없다는 것입니다 (예 : [ball_1, ball_2]; (ball_1, ball_2); ...) [(ball_1, ball_2); (ball_1, table); (ball_1, ball_2); ...]와 같이 충돌 목록으로).