Em um jogo 2D baseado em blocos, como NPCs e blocos devem se referir um ao outro?

9

Estou criando um mecanismo de blocos para jogos 2D de cima para baixo. Basicamente, o mundo é composto por uma grade de azulejos.

Agora, quero colocar, por exemplo, NPCs que podem se mover no mapa.

O que você acha que é melhor:

  1. cada bloco possui um ponteiro para o NPC que está em seu bloco ou um ponteiro NULL
  2. tendo uma lista de NPCs, e eles têm as coordenadas do bloco em que estão.
  3. algo mais?

eu acho que

  1. é mais rápido para detecção de colisão, mas usaria muito mais espaço de memória e é mais lento para encontrar todos os NPCs em um mapa.
  2. é o oposto
lezebulon
fonte

Respostas:

11

Por que não ambos? Há momentos em que você deseja verificar se há algum NPC em um bloco específico (como para detecção de colisão, como você mencionou) e outras em que você deseja iterar todos os NPCs do mundo ( como executar seus métodos de IA a cada quadro).

Um ponteiro por bloco não tem muita memória, a menos que você esteja trabalhando em uma plataforma com restrição de memória ou tenha um mapa realmente grande.

Nathan Reed
fonte
5
+1 Costumo concordar com isso, no entanto, @lezebulon, sugiro que você encapsule qualquer lógica que precise atualizar os dois juntos, o mais cedo possível. Ou seja, quando um jogador deixa um bloco, deve haver uma operação atômica (chamada de função) para remover os ponteiros, jogador para bloco e bloco para jogador, ao mesmo tempo. E o mesmo para quando um jogador chegar em um ladrilho, faça as duas tarefas de ponteiro juntas. Isso poupará um caos em potencial, onde as referências não concordam entre si, ou seja, uma existe enquanto a outra não.
Engenheiro
0

Como você lida com colisões com o mapa? Se você tiver uma camada de colisão, uma maneira muito fácil seria criar primeiro uma lista de NPCs com coordenadas indicando em qual bloco eles estão e, em seguida, percorrer essa lista e marcar o bloco da camada de colisão sob o NPC como um bloco de colisão. Dessa forma, as colisões contra os NPCs seriam tratadas ao mesmo tempo que o resto do mapa. Isso é claro, se os NPCs não se moverem ...

Joona
fonte