Come posso garantire la simmetria del campo visivo in una Roguelike?


10

Sto lavorando su una Roguelike, e per questo ho creato un algoritmo FoV (ray tracing / casting field of view) che consiste nel tracciare linee di Bresenham in ogni punto di un cerchio solido. È privo di artefatti (e ragionevolmente efficiente), ma manca un mio importante requisito: la simmetria (se riesci a vedere un mostro, deve anche essere in grado di vederti).

inserisci qui la descrizione dell'immagine

Ecco un esempio del comportamento non simmetrico del mio codice. Nell'immagine a sinistra sono in piedi in un angolo (blocchi "X" rossi = muro). Sono in grado di vedere le tessere in alto a destra. Tuttavia, se mi sposto su una di quelle tessere (immagine a destra), non riesco più a vedere la tessera da cui provengo.

Penso che potrei avere una forma di Campo visivo permissivo , ma solo perché l'articolo Roguebasin ha suggerito che consentiva la simmetria. Ci sono mezzi alternativi per ottenere la simmetria?


1
Assicurati solo che il punto dell'occhio sia nella stessa posizione in cui stai proiettando il raggio durante il test di visibilità.
MichaelHouse

Risposte:


8

Sembra che tu includa un quadrato quando puoi vedere qualsiasi punto in esso mentre l'occhio è nel singolo punto fisso.

Tuttavia, dovresti includere un quadrato solo quando puoi vederlo al centro (supponendo che anche "l'occhio" sia al centro). Oppure puoi disegnare raggi da ogni angolo del quadrato iniziale agli angoli del quadrato testato, se puoi vederne uno da qualsiasi allora includi.

Il punto chiave è che la hitbox di un quadrato dovrebbe essere anche in tutte le posizioni in cui l'occhio deve essere.

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.