In un gioco basato su tessere 2D, in che modo gli NPC e le tessere devono fare riferimento l'un l'altro?


9

Sto realizzando un motore di tessere per giochi 2D dall'alto verso il basso. Fondamentalmente il mondo è composto da una griglia di piastrelle.

Ora voglio mettere ad esempio NPC che possono spostarsi sulla mappa.

Cosa pensi sia il migliore:

  1. ogni riquadro ha un puntatore all'NPC che si trova sul suo riquadro o un puntatore NULL
  2. avere un elenco di NPC e hanno le coordinate della tessera su cui si trovano.
  3. qualcos'altro?

penso

  1. è più veloce per il rilevamento delle collisioni ma utilizza molto più spazio di memoria ed è più lento trovare tutti gli NPC in una mappa.
  2. è il contrario.

Risposte:


11

Perché non entrambi? Ci sono momenti in cui vorresti vedere per vedere se c'è un NPC su una tessera specifica (come per il rilevamento delle collisioni, come hai menzionato), e altre volte quando vorrai iterare su tutti gli NPC nel mondo ( come per eseguire i loro metodi di intelligenza artificiale ogni frame).

Un puntatore per riquadro non è così tanta memoria a meno che tu non stia lavorando su una piattaforma con limiti di memoria o non abbia una mappa davvero enorme.


5
+1 Tendo ad essere d'accordo con questo, tuttavia @lezebulon, ti suggerisco di incapsulare qualsiasi logica che debba aggiornare entrambi insieme, il più presto possibile. Cioè, quando un giocatore lascia una tessera, dovrebbe esserci un'operazione atomica (chiamata di funzione) per rimuovere contemporaneamente entrambi i puntatori, giocatore-tessera e tessera-giocatore. E lo stesso per quando un giocatore arriva su una tessera, esegui le due assegnazioni del puntatore insieme. Questo ti risparmierà un potenziale caos in cui i riferimenti non sono d'accordo tra loro, cioè uno esiste mentre l'altro no.
Ingegnere,

0

Come gestite le collisioni con la mappa? Se si dispone di un livello di collisione, un modo molto semplice sarebbe innanzitutto quello di creare un elenco di NPC con coordinate che indichino su quale riquadro si trovano e quindi scorrere l'elenco e contrassegnare il riquadro del livello di collisione sotto l'NPC come riquadro di collisione. In questo modo, le collisioni con gli NPC sarebbero gestite contemporaneamente al resto della mappa. Cioè, ovviamente, se gli NPC non si muovono ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.