등각 충돌 탐지는 어떻게 처리합니까?


14

아이소 메트릭 런-점프 스타일 플랫 포머를 만들고 싶습니다. 플레이어는 바닥 위의 플랫폼 위로 뛰어 올라 물체의 측면을 때릴 수 있어야합니다.

2D 게임 엔진을 사용하므로 사용하지 않는 치수에 대해 전체 3D 충돌을 모방하고 싶지 않습니다.

게임의 오브젝트는 깊이를 위해 X, Y, 너비, 높이 및 Z를 사용하여 배치해야한다고 생각합니다.

이 값을 사용하여 충돌을 어떻게 감지해야합니까?


나는 이것이 일반적인 종류의 질문이라는 것을 알고 있지만 더 자세한 답변이나 좋은 학습 자료에 대한 링크를 원합니다.
jdeseno

답변:


19

2 가지 옵션 :

  • 고정 된 직교 카메라를 사용하여 3D 게임으로 취급 할 수 있습니다. 그런 다음 모든 표준 3D 게임 리소스 / 책 / 자습서 / 라이브러리를 사용할 수 있습니다. 스프라이트로 2D로 렌더링 되더라도 움직임 등의 계산은 여전히 ​​씬 뒤에서 3D가됩니다. 가장 정확한 결과를 얻을 수 있습니다.

  • 높이 속성이 추가 된 하향식 2D 게임으로 취급 할 수 있습니다. 예를 들어, 각 타일에 높이 값이있는 2D 그리드를 상상해보십시오. 한 타일에서 다른 타일로 이동할 때 캐릭터의 발이 해당 타일의 높이보다 높거나 같은 경우에만 캐릭터가 특정 타일로 넘어갈 수 있지만, 점프하고 중력이 타일 위로 내려 오면 그들에게 남아있게하십시오. 약간의 작업으로 다리 등을 걸을 수 있습니다.


4

이를 단순화 할 수있는 많은 방법이 있습니다. 예를 들어 레이어를 허용하지 않은 경우 (예를 들어 다리를 걸을 수있는 다리와 같은) X / Y 차원에서 충돌 감지를 수행 할 수 있습니다. 여기서 충돌 세트를 높이 + 깊이로 필터링합니다. 또는 더 높게.


2

게임이 사각형 격자를 기반으로하는 경우이 격자는 X / Y 축을 정의합니다. 그리고 Z는 높이로 사용될 수 있습니다.

그러면 충돌이 2D 타일 기반 게임만큼 쉬워집니다.

그런 다음 그리드에서 다시 아이소 메트릭 스크린 좌표로 변환하여 렌더링하면됩니다. 이것은 매우 간단하지만 정렬 목적으로 (깊이 값을 계산하는 것에 대해 생각해야 할 수도 있습니다 (아이소 메트릭 장면을 뒤에서 앞으로 렌더링)


높이에 Z를 사용하면 본능에 위배되지만 하향식 2D 게임에서하는 것이 옳습니다. 사이드 온 게임과 하향식 게임 사이에서 코드를 재사용 할 수 있습니다.
Iain

2

인터넷 검색이 데모를 찾습니다 : http://planetskill.com/iso/

WASD가 움직입니다. 스페이스 바 점프

위 / 아래 축과의 충돌 만 구현하지만 다른 충돌을 추가하는 것은 쉽습니다.

다음 단계의 위 / 아래 위치가 최대보다 높으면 움직이지 마십시오. 이것은 또한 쉬운 방법으로 점프를 구현할 수 있도록해야합니다.

여기에 샘플 코드 : http://gist.github.com/478997


2

무엇보다도. 아이소 메트릭은 전단 형 2D 그리드 일 뿐이므로 2D 타일 맵으로 취급하고 깊이를 인코딩하는 방법을 생각하십시오. 일반 2D 게임에서 어떻게 할 것입니까 ( '점프'할 때 블록 뒤 또는 앞으로 갈 수 있습니까?) 타일 당 깊이 (깊이 버퍼-> z 버퍼)를 저장하거나 여러 레이어를 사용합니다 또는 더 멋진 사용자를 원한다면 타일 유형 (또는 맵 위치)마다 콜백을 구현하고 원하는 것을 수행하고, 깊이를 확인하고, 장비를 확인하고, 플레이어를 뒤 틀고, 플레이어를 천천히 위로 움직이고, HD를 포맷 할 수 있습니다.


좋은 답변 Kaj-이것은 문제의 핵심이며, 아무도 그것을 제기하지 않은 것에 놀랐습니다. 이것은 물리학과 관련하여 항상 등척 법에 대해 초보자를 혼동하는 것입니다.
엔지니어

1

레벨 위에 볼 수없는 별도의 충돌 레이어가 있고 충돌을 확인하는 데 사용할 수 있습니다. 플레이어가 어떤 레이어인지 아는 한이 레이어를 여러 레이어에 사용할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.