En un juego basado en mosaicos 2D, ¿cómo deberían los NPC y los mosaicos referirse entre sí?

9

Estoy haciendo un motor de mosaico para juegos 2D de arriba hacia abajo. Básicamente, el mundo está compuesto por una cuadrícula de azulejos.

Ahora quiero poner, por ejemplo, NPC que pueden moverse en el mapa.

¿Qué crees que es mejor?

  1. cada mosaico tiene un puntero al NPC que está en su mosaico, o un puntero NULO
  2. tener una lista de NPC y tienen las coordenadas del mosaico en el que se encuentran.
  3. ¿algo más?

Yo creo que

  1. es más rápido para la detección de colisiones, pero usaría mucho más espacio de memoria y es más lento encontrar todos los NPC en un mapa.
  2. es lo opuesto.
lezebulon
fuente

Respuestas:

11

¿Por qué no los dos? Hay momentos en los que querrás mirar para ver si hay algún NPC en un mosaico específico (como para la detección de colisión, como mencionaste), y otros momentos en los que querrás iterar sobre todos los NPC en el mundo ( como para ejecutar sus métodos de IA en cada cuadro).

Un puntero por mosaico no es tanta memoria a menos que esté trabajando en una plataforma con limitaciones de memoria o tenga un mapa realmente enorme.

Nathan Reed
fuente
55
+1 Tiendo a estar de acuerdo con esto, sin embargo, @lezebulon, te sugiero que encapsules cualquier lógica que deba actualizarse a la vez, lo antes posible. Es decir, cuando un jugador abandona una ficha, debe haber una operación atómica (llamada a función) para eliminar los punteros, jugador a ficha y ficha a jugador, al mismo tiempo. Y lo mismo para cuando un jugador llega a una casilla, haz las dos asignaciones de puntero juntas. Esto le ahorrará un posible caos donde las referencias no coinciden entre sí, es decir, una existe mientras que la otra no.
Ingeniero
0

¿Cómo manejas las colisiones con el mapa? Si tiene una capa de colisión, una forma muy fácil sería crear primero una lista de NPC con coordenadas que indiquen en qué mosaico se encuentran y luego iterar a través de esa lista y marcar el mosaico de la capa de colisión debajo del NPC como un mosaico de colisión. De esa manera, las colisiones contra los NPC se manejarían al mismo tiempo que el resto del mapa. Eso es, por supuesto, si los NPC no se mueven ...

Joona
fuente