2011-09-13 5 views
0

다른 많은 사람들과 마찬가지로 이전에 2D 플랫폼을 코딩 중이거나 더 정확하게 엔진에서이를 코딩하고 있습니다. 내 질문은 충돌 감지 및 특히 충돌에 대한 반응입니다.벡터 기반 2D 플랫폼에서의 충돌 감지

플랫폼 기반의 세계가 직선이 아닌 표면이 급하게 필요하기 때문에 타일 기반이 아닌 표면을 갖는 것이 중요합니다.

그런 구현을위한 최선의 방법은 무엇이라고 생각하십니까?

저는 이미 해결책을 찾았지만 95 %만이 만족합니다.

내 개체는 구성 요소 기반이므로 처음에는 모든 운동을 계산합니다. 수평 위치 변경. 떨어지는. 점프 속도; 모든. 그런 다음이 값을 임시로 저장합니다. Collision 구성 요소에 액세스 할 수 있습니다.

이 엔티티에 4 개의 체력을 추가합니다. 두 개는 바닥 충돌 용이고 두 개는 벽 충돌 용입니다. 내가 먼저 바닥에 대한 확인이

image http://fux-media.com/collision.png

처럼

. 충돌이 발생하면 더 이상 충돌이 없을 때까지 충돌 감지를 위쪽으로 반복합니다.

개체를이 시점으로 재설정했습니다. 두 지상의 체력이 충돌하면, 엔티티가 공중에 떠 다니는 것을 피하기 위해 엔티티를 가장 낮은 지점으로 재설정합니다.

그런 다음 상단 히트 포인트가있는 벽을 확인합니다. 기본적으로, 충돌하는 경우, 위와 동일한 작업을 수평 적으로 수행합니다.

If는 아주 잘 작동합니다. 매우 무거운 상승은 벽처럼 취급되고 매우 낮은 상승은 막 올라갔습니다. 그러나 그 사이에, 상승이 약 45 도일 때, 그것은 이상하게 행동합니다. 그것은 옳다고 생각하지 않습니다.

내 게임에서 45 도의 벽을 구현하는 것을 피할 수는 있지만 그다지 깨끗하지는 않을 것입니다. 무엇이든지 상관없이 올바르게 작동 할 엔진을 프로그래밍하고 있기 때문입니다.

그럼 ... 알고리즘을 구현하려면 어떻게해야할까요?

+0

저는 각이 진 벽과 비슷한 문제가있었습니다. hacky work-arounds에 대한 몇 가지 시도와 훌륭한 물리 엔진이 반복적 인 솔버를 필요로한다는 놀라운 사실을 깨닫고 물리 코드를 [Chipmunk] (http://code.google.com/p/chipmunk- 물리학/). –

답변

1

나는 당신이 포인트와 함께 올바른 길을 가고 있다고 생각합니다. 이러한 점을 결합하여 다각형을 형성 한 다음 결과 다각형을 사용하여 충돌 감지를 수행 할 수 있습니다.

Phys2D은 여러 유형의 기하 도형 간의 충돌을 일으키는 Java에서 발생하는 라이브러리입니다. 이 사이트에는 라이브러리의 기능에 대한 다운로드 가능한/실행 가능한 데모가 포함되어 있습니다.

주위를 둘러 보시면 2D 폴리곤 충돌 감지 구현을 대부분의 일반적인 언어로 볼 수 있습니다. 약간의 연구와 기본 기하학 계산에 대한 이해, 그리고 기분 전환을 통해 원하는 경우 직접 작성할 수도 있습니다.