En un juego 2D basado en fichas, ¿cómo se deben hacer reference los NPC y las fichas entre sí?

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

Ahora quiero poner, por ejemplo, NPC que se puedan mover en el map.

¿Qué crees que es mejor?

  1. cada tesela tiene un puntero al NPC que está en su tesela, o un puntero NULL
  2. tener una list de NPC, y tienen las coorderadas de la casilla en la que están.
  3. ¿algo más?

creo

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

¿Por qué no ambos? Hay momentos en los que querrás ver si hay algún NPC en un mosaico específico (como para la detección de colisiones, como mencionaste) y otras veces en los que quieras iterar sobre todos los NPCs del mundo ( como para ejecutar sus methods de IA en cada fotogtwig).

Un puntero por ficha no es tanta memory a less que trabaje en una plataforma con memory limitada o que tenga un map realmente grande.

¿Cómo manejas las colisiones con el map? Si tienes una capa de colisión, una manera muy fácil sería crear primero una list de NPC con coorderadas que indiquen en qué mosaico están y luego iterar a través de esa list y marcar el mosaico de la capa de colisión debajo del NPC como una ficha de colisión. De esta forma, las colisiones contra NPC se manejarían al mismo time que el rest del map. Eso es, por supuesto, si los NPC no se mueven …