Trovare tessere scoperte in un gioco basato su tessere


9

Sto lavorando a un gioco basato su tessere 2D e in questo momento sto cercando di far funzionare un secondo equivalente di volumi ombra. Ho problemi a trovare le superfici che dovrebbero proiettare ombre. Da qualsiasi punto del gioco, ho bisogno di trovare le facce scoperte o l'intera tessera.

La mia domanda è: come posso trovare queste piastrelle / spigoli il più velocemente possibile, dato un punto?

Immagine che mostra la linea di mira generale e le piastrelle interessate

Risposte:



2

Questa non è una risposta completa, ma speriamo che possa aiutare.

La tua mappa / riquadro è impostato statico o dinamico? Se è statico, ti incoraggio vivamente a eseguire l'elaborazione offline e a pre-calcolare il più possibile in quel modo. Puoi farlo come vuoi (raycasting o qualcosa di più intelligente), ma non ti interessa davvero fare molto velocemente perché tutto accadrà offline mentre "aumenti" i tuoi livelli. Puoi pre-calcolare esattamente quali tessere sono visibili da ogni punto o creare un qualche tipo di regioni più grandi e tutte le tessere potenzialmente visibili da ogni regione.

Quindi, in fase di esecuzione, la query per i riquadri visibili dovrebbe essere molto semplice e molto veloce.

Certo, se hai livelli creati dinamicamente, allora questo non si applica affatto :-)


1

Puoi vedere come l'ho implementato per un roguelike C # qui . Il codice non è altamente ottimizzato, ma sembra essere abbastanza veloce per me e (cosa più importante) dovrebbe essere abbastanza facile da leggere. Sta fondamentalmente facendo un semplice algoritmo di casting ombra che funziona un ottante alla volta.


0

Non sono sicuro su quale piattaforma tu sia, ma non riesco davvero a pensare a nessuna piattaforma che non sarebbe abbastanza veloce da far crescere un cerchio attorno alle entità di lightcasting (a meno che non ce ne siano molte) e rilevare se il una tessera che sta per essere "tracciata" nel tuo algoritmo circolare è una tessera solida e quindi un blocco della luce. Da quel momento in poi sarebbe leggermente più complicato in quanto dovresti tenere traccia dei segmenti circolari che sono occlusi o meno, ma sarebbe quello che farei. Un'altra opzione sarebbe quella di lanciare raggi in un cerchio (di nuovo piuttosto velocemente) nello spazio di risoluzione delle piastrelle e fermare ogni raggio quando colpisce una tessera solida.


Bene, faccio principalmente giochi Flash e Javascript, ma attualmente faccio una sorta di metodo della forza bruta che inizia a impantanarsi dopo un po '. Immagino che se riesco a capire come ottimizzarlo, posso far funzionare questo gioco abbastanza bene.
Ryan S,

Dovrebbe essere facilmente realizzabile in flash, forse la tua forza bruta potrebbe essere ottimizzata. Inoltre, in generale, non è necessario aggiornarlo ogni fotogramma, quindi è possibile precalcolare la situazione successiva su un paio di fotogrammi
Kaj
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.