2D 타일 기반 게임에서 NPC와 타일은 어떻게 서로 참조해야합니까?


9

하향식 2D 게임을위한 타일 엔진을 만들고 있습니다. 기본적으로 세계는 타일 그리드로 구성됩니다.

이제 맵에서 움직일 수있는 NPC를 예로 들어 보겠습니다.

무엇이 가장 좋다고 생각하십니까?

  1. 각 타일에는 타일에있는 NPC에 대한 포인터 또는 NULL 포인터가 있습니다.
  2. NPC 목록이 있고 타일의 좌표가 있습니다.
  3. 다른 것?

나는 생각한다

  1. 충돌 감지 속도는 빠르지 만 훨씬 더 많은 메모리 공간을 사용하며 맵에서 모든 NPC를 찾는 속도가 느려집니다.
  2. 반대입니다.

답변:


11

왜 모두? 특정 타일에 NPC가 있는지 (예 : 언급 한대로 충돌 감지 등)보고자하는 경우와 세계의 모든 NPC를 반복하고 싶을 때가 있습니다 ( AI 프레임을 매 프레임마다 실행하는 등).

메모리가 제한된 플랫폼에서 작업하거나 정말 큰지도 가 없다면 타일 당 포인터는 그다지 많은 메모리가 아닙니다 .


5
+1 나는 이것에 동의하는 경향이 있지만 @lezebulon은 가능한 한 빨리 두 가지를 모두 업데이트 해야하는 논리를 캡슐화하는 것이 좋습니다. 즉, 플레이어가 타일을 떠날 때, 플레이어-타일 및 타일-투-플레이어를 동시에 제거하는 하나의 원자 연산 (함수 호출)이 있어야합니다. 플레이어가 타일에 도착했을 때와 마찬가지로 두 개의 포인터 할당을 함께 수행하십시오. 이렇게하면 참조가 서로 동의하지 않는 잠재적 혼란을 줄일 수 있습니다. 즉, 하나는 존재하지만 다른 하나는 존재하지 않습니다.
엔지니어

0

지도와의 충돌을 어떻게 처리합니까? 충돌 레이어가있는 경우 가장 쉬운 방법은 좌표가 포함 된 NPC 목록을 만들어 해당 타일이있는 타일을 표시 한 다음 해당 목록을 반복하고 NPC 아래의 충돌 레이어 타일을 충돌 타일로 표시하는 것입니다. 이렇게하면 NPC와의 충돌이 다른 맵과 동시에 처리됩니다. 물론 NPC가 움직이지 않는다면 ...

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