현실적인 2D 롤 플레잉 게임 충돌 탐지를 만드는 방법은 무엇입니까?


9

나는 항상 Star Ocean, Final Fantasy, Sword of Mana, 심지어 "Tales of"시리즈와 같은 구식 2D 롤 플레잉 게임을 만들고 싶었고 많은 사람들이 그렇게 생각합니다. 그러나 한 줄의 코드를 작성하기 전에 많은 연구, 그림 및 시도를했습니다.

내 질문에 대한 거의 모든 답변을 찾았지만 해결할 수 없었던 문제 가 있습니다. 이전에 명명 한 게임에서와 같이 현실적이면서도 간단한 충돌 탐지를 어떻게 만들 수 있습니까?

충돌 감지를 계산하는 몇 가지 방법을 이미 알고 있습니다. 다음 예를 살펴보십시오.

충돌 감지 예

이 중 어느 것도 나의 요구를 충족시키지 못합니다.

  • 타일 ​​기반 충돌은 너무 간단하며 스타 오션보다 젤다에 더 적합합니다. 또한 각 타일의 그림은 사실적으로 보이기 위해 모든 공간을 채워야합니다.
  • 픽셀 퍼펙트에는 제약 조건이 너무 많습니다. 타일에 여기 저기에 픽셀이 있으면 플레이어는 아무데도 중간에 갇히게됩니다 (예 : 일부 게임에서는 너비가 2 픽셀 인 나무 뿌리에 갇히게됩니다).
  • 바이너리 마스크는 너무 많은 메모리와 설정을 사용합니다.

나는 많은 문서를 읽었지만 나에게 좋아 보이는 것을 찾지 못했습니다. 그리고 내 모든 시도는 내가 가지고 놀던 것에 가깝지 않았습니다. 따라서 진화 된 2D RPG 작동 방식에 대한 좋은 링크 나 자습서가 있으면 알려주십시오.


2
그 충돌 마스크를 위해 어떤 환경을 개발하고 있습니까? 그것은 대부분의 현대 시스템에서 실제로 걱정하지 않으며 충돌 마스크는 실제로 원하는 것과 같은 소리를냅니다.
Gregory Avery-Weir

나는 대부분 XNA로 PC에서 개발하고 있지만 최근에는 WP7에서 프로젝트를 시작하려고 생각하고 있습니다. 충돌 마스크의 문제점은 예를 들어 캐릭터가 모서리에 갇히게하여 작은 해상도를 사용하면 픽셀처럼 완벽하게 작동한다는 것입니다. 따라서 부드러운 움직임을 위해 베 지어 곡선을 사용하지 않으면 마스크를 만드는 방법에 매우 신중해야합니다.
Aymeric

답변:


9

N 튜토리얼 이 여기에 도움이 될 수 있습니다. 물론 아케이드 스타일의 플랫 포머 용이지만 하향식 RPG에서도 잘 작동합니다. 중력을 적용하지 마십시오. 전제는 원형, 축 정렬 경계 상자, 선, 점 등 기본 모양 모음에서 충돌을 테스트합니다.

그런 다음 어쨌든 사용자 지정 수준 편집기를 통해 세계를 장식하거나 자동으로 생성하거나 (가장 가까운 상자 또는 원에 맞추기) 또는 둘 다 (기본적으로 자동 생성 된 상자 / 원으로 디자이너가 조정할 수 있음) .

내가 일하는 곳에서 우리는 꽤 많은 플랫 포머와 하향식 탐험 게임을 해왔다. 우리는 GBA 시절부터 그 일을 해왔습니다. 스프라이트 에디터에서 조정할 수있는 캐릭터와 오브젝트에 AABB를 사용하는 경우가 많으며, 스프라이트 당 수많은 상자를 사용할 수 있도록 여기에 미치게됩니다. 우리는 :

  • 물체에 부딪 치기위한 물체의 형상을 기술하는 하나 이상의 충돌 박스;
  • 어쩌면 공격 중에있을 때만 발생하는 많은 "공격 상자"(그리고 스프라이트로 애니메이션), 아마도 무기 당 2 개 또는 3 개일 수 있습니다.
  • 다른 사람의 공격 상자에 부딪 칠 때 피해를 입히는 몇 가지 "취약성 상자"-기본적으로 충돌 상자를 사용하지만 취약 상자는 충돌 상자보다 작을 때 기분이 좋아지는 경향이 있으며 이런 식으로 위치 인식 손상
  • AI의 감지 영역을 설명하는 AI의 하나 이상의 "활성화 상자"-플레이어가이 영역에있는 경우 공격합니다.

레벨은 대부분 선 세그먼트의 문자열입니다. 손상되거나 미끄러운 표면 등을 설명하기 위해 세그먼트 당 약간의 메타 데이터가 있습니다.

따라서 대부분의 충돌 감지 및 응답은 AABB-vs-AABB 또는 AABB-vs- 세그먼트가됩니다. 종종 AABB도 여기에서 수행하지만 발사체를 위해 원형 대 무언가를 던지기도합니다.

모양을 조정하고 반복 할 수 있다면 모양이 좋아 보이고 잘 작동하기 위해 많은 기본 모양이 필요하지 않습니다.


또한 시스템을 혼합하는 것에 대해 나쁘게 생각하지 마십시오. 타일 ​​기반 충돌은 (대부분의 세계를 대표하는) 일부 영역에서는 우수하지만 객체-오브젝트 상호 작용에는 끔찍할 수 있습니다. 괜찮아; object-vs-object에 다른 시스템을 사용하십시오! 두 시스템 간의 상호 작용에 대한 글쓰기는 생각보다 쉽습니다.

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