타일 ​​기반 게임에서 벽 만들기 : 무엇을 놓치고 있습니까?


25

타일 ​​기반 게임에 벽을 구현하는 것과 관련된 메모를 작성하기 위해 오늘 시간을 보낸 후에 갑자기 상상했던 것처럼 간단하지 않다는 것을 깨달았습니다. 내 작업의 현재 단계가 실제로 벽 관련 코드를 작성하는 데 가깝지는 않지만 세 가지 다른 방법을 생각해 냈습니다. 지금은 어떤 아이디어가 가장 잘 작동하는지, 내가 놓친 것이 있는지 확실하지 않습니다.

중요 : 캐릭터 는 형태에 관계없이 벽이있는 타일 위에 서있을 있습니다.

세 가지 변형의 공통점 : 타일 맵은 단일 차원 std :: vector (또는 유사한) 기반 컨테이너에서 "유지"됩니다. 그 이유는 다른 질문에 대한 답변으로 (굉장히) 설명되어 있습니다.

타일 ​​기반 게임의 컨테이너 클래스.

벽으로 돌아 가기

A) 간단한 접근법.

여기서 멋진 것은 없습니다. 각 타일 컨테이너에는 문자뿐만 아니라 타일 내부 의 가장자리에 부착 된 하나 또는 여러 개의 벽 객체를 담을 수 있습니다 .

첫 번째 접근법

장점 : 구현이 쉽고 엔진의 변화가 없습니다. 단점 : 두 가지. 하나-내 머리에있을 수도 있지만 일부 조합은보기 흉하게 보입니다. 두 번째-이 접근법은 인접한 두 타일로 이중 벽을 만들 수 있습니다. 건축은 게임의 중요한 부분이 될 것이며, 이중 벽은 건축자가 게임 수단을 통해 벽의 재료를 업그레이드하는 것을 포기하고 기존 벽을 두 배로 늘려 내구성을 향상시킬 수 있습니다. 바람직하지 않습니다. 물론, 이중 벽을 금지하는 절차를 포함시킬 수는 있지만 느낌이 좋지 않습니다.

B) 똑똑한 (?) 접근.

플레이어들에게 맵 전체를 이중 벽으로 만드는 대신, 그들을 이길 것입니다. 모든 벽에는 내부에서 타일 가장자리에 붙어있는 두 개의 반쪽이 있습니다. 따라서 하나의 "벽 유닛"을 만들려면 두 개의 인접한 타일에 반월 오브젝트를 두 개 만들어야합니다.

두 번째 접근

장점 : 대칭입니다 !!! 또한 현재 엔진 사양을 크게 변경할 필요가 없습니다. 단점 : 더 많은 번거 로움, 더 많은 물건, 그리고 물론 "모자". 그림에서 볼 수 있듯이 코너는 기본적으로 "모자"개체를 외칩니다. 나는 실제로 그것을 시원합니다. 추가하기는 어렵지 않습니다. 안녕하세요, 이미 연결된 캡 4 개로 만들어진 얇은 기둥을 계획하고 있습니다. 단. 여전히 시야와 시선 문제에 대해 걱정하고 있습니다.

C) 총 분해 변형.

또는 게임 개체에 대한 별도의 컨테이너로 테두리와 모서리를 만들 수도 있습니다. 그냥 그렇게

세번째 접근

장점 : 확실하지 않습니다. 글쎄요. 명확히. 단점 : 점검이 필요하다. 고맙게도 코드는 아니지만 현재의 게임 메카닉 사고 방식은 확실합니다. 이점은 분명하지 않습니다. 또한이 aprroach에는 이전의 두 가지보다 훨씬 많은 컨테이너가 필요 합니다. 인덱싱 수학도 약간의 고통이 될 것입니다.

여기 타일 사이에 벽을 만드는 세 가지 뚜렷한 방법이 있습니다. 다른 대안이 있다면 기꺼이 확인해 드리겠습니다. 내가 보지 못한 접근법에 대한 이점 / 하락이있는 경우 지적하십시오.


2
A.2 : A로서 북쪽과 서쪽과 같이 단지 두 면만 벽을 가질 수 있습니다. 이것이 X-Com이 사용하는 접근법입니다.
Martin Sojka

@Martin Sojka 남동쪽 모퉁이에 구멍을 남깁니다. 그럼에도 불구하고, 이러한 방식으로 모델 C를 고려하는 것이 유용 할 수 있으며, 각각의 타일은 노치 (noth), 서쪽 및 북서쪽 코너의 세 가지 벽 요소의 조합을 가질 수있다.
aaaaaaaaaaaa

벽이 보이네요. 타일의 가장자리를 막는 것만이 아닙니다. 옵션 B에 왜 두 개의 반쪽이 필요합니까? 왜 하나의 벽만 다른 타일에 반 오프셋되지 않습니까?
Richard Marskell-Drackir

@eBusiness, 북쪽과 서쪽에 벽을 허용하면 벽 아래에 타일의 북쪽과 서쪽에 벽을 놓음으로써 남쪽과 동쪽에있는 벽을 시뮬레이션 할 수 있습니다.
Tetrad

C와 함께 갈 것을 제안합니다.이 jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png 에서 내가하고있는 일이며 꽤 잘 작동합니다. 유일한 문제는지도의 가장 남쪽 / 동쪽 가장자리입니다. 당신은 그것에 대해 뭔가를해야합니다.
Blecki

답변:


14

나는 당신의 방법 'B'를 사용할 것입니다.

'캡'이 필요하지 않게하려면 각 벽을 "1/2 벽 두께"를 양방향으로 연장하십시오. 이렇게하면 벽이 겹치는 곳에 겹치는 벽이 만들어 지지만 다이어그램에서는 이미 이것이 문제가 아니라고 제안합니다.

따라서 방법 #B, 그림 # 3에서 수평 벽은 약간 왼쪽으로 확장되고 수직 벽은 약간 확장됩니다.

[지금 막 새로 등록했습니다. 원래 게시물에 '댓글 추가'버튼이 표시되지 않아서 뭔가 빠졌습니다. 그것은 더 높은 평판을 가진 사람들의 특권입니까? 아니면 명백한 것을 내려다보고 있습니까? 이것을 '답변'으로 추가하여 죄송합니다.]


1
이것은 답변이며, 100 (?) 평판 수준이라고 생각합니다. Gamedev SE에 오신 것을 환영합니다! :)
공산주의 오리

2

캐릭터가 벽이있는 타일 위에 서있을 수 있지만 각 타일을 벽 자체로 취급하는 것을 고려 했습니까? 수평 또는 수직 방식으로 벽으로 절반 타일조차도?

장점 : 계산 및 배치는 사소한 것이며 충돌은 사소한 데 모든 계산 및 충돌은 벽 배치의 좌표를 기반으로합니다.

단점 : 전체 구현, 코드 및 그래픽에 영향을 줄 수 있습니다. 당신은 방법을 완전히 포기하고 싶지 않으며, 타일의 일부만 벽인 특별한 경우를 원합니다 (벼랑으로 과거와 연결).

이것은 내가 타일을 항상 참조하고 캐릭터 위치와 타일 종류에 따라 타일을 계산할 수 있다는 것을 알고 구현을 기반으로 한 방법입니다.

성벽은 내가 통과 할 수없는 상자를 그리거나 중심에서 계산을 수행 할 수 있거나 둥근 바위 인 경우 중심에서 동일한 계산을 수행 할 수 있지만 원처럼 내 캐릭터가 움직일 수 있습니다 반올림.


1

유감스럽게도 세 번째 방법은 실제로 생각할 수있는 방법입니다. 이미 그렇게 할 수있는 능력이 있으므로 다른 두 가지 방법에 대해 생각해보십시오!

문제는 벽이 너비가 0이고 2 개의 차원 (3D 세계에서 높이 * 길이) 사각형이 2 개의 상자를 분할하는 것입니다. 그것들을 그러한 것으로 간주해야하지만 던전을 만들 때 (특히 다른 사람들이 부품을 만들 수있는 경우)보다 간단한 솔루션을 사용할 수 있습니다.

벽에 "너비"가있는 Top-Down 2D 게임 인 것 같습니다. 따라서 해당 모서리 ( '캡'개체)가 필요합니다. 이것은 독점적으로 '그래픽'이므로 다음과 같은 종류를 사용합니다.

타일이있는 2D 맵 (예 : 타일 유형 등)

벽이 2 개인 2D 맵 (예 : 아래쪽 및 오른쪽 (왼쪽 벽은이 타일에서 왼쪽 타일의 '오른쪽 벽'임)

+ 모든 벽과 '모자'등을 그리는 논리

따라서 논리와 그래픽을 분리합니다. SetWall (ThisTile, LEFT, NOWALL)-> ThisTile 왼쪽 타일의 오른쪽 벽을 "NOWALL"로 설정하는 것과 같은 것을 처리하는 "인터페이스"를 할 수 있습니다

어쩌면 이것이 희미 해 보이지만 문제는 항상 한쪽에 논리 (중복이없는 실제 데이터)를, 다른쪽에는 '캡이 필요한지 계산하는'데이터 그리기 '를 가져야합니다. '등

++

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