Generazione procedurale di livello infinito


16

Quali sono alcuni buoni approcci per generare proceduralmente un livello 2d infinito? Il livello potrebbe essere limitato in entrambe le dimensioni, ma non necessariamente.

L'approccio che per me ha più senso finora è l'utilizzo di un raggio basato sulla griglia. ad es. dividere l'area di gioco in una griglia con quadrati di una certa dimensione e quindi caricare X quadrati in un raggio attorno al giocatore. Quindi, quando il giocatore si sposta in un altro quadrato, costruisci il set successivo e lascia cadere più lontano (l'area esplorata persistente non è necessaria.) Quando viene costruito un quadrato, contiene una disposizione casuale di oggetti. Quando gli oggetti lasciano l'anello esterno dei quadrati vengono rimossi dal mondo. Ci sono modi migliori o diversi? O se questo è un buon approccio, quali sono i potenziali problemi?

Per motivi di discussione, puoi pensare al livello come a un campo di asteroidi dall'alto verso il basso con potenziamenti, ecc. Sparsi ovunque.


2
Questo sembra essere correlato: gamedev.stackexchange.com/questions/2230/…
jacmoe

^ e quindi si trova nella colonna "Correlata" sul lato destro. Non è necessario il collegamento.
Ricket,

7
E poi è diventato "collegato" e "correlato" - pulito, eh? :)
jacmoe,

Risposte:


6

Un problema con mondi "infiniti" è che le coordinate sottostanti potrebbero non essere infinite. A volte, se il gioco rallenta abbastanza il giocatore, potrebbe non essere un problema, perché il tempo per raggiungere il numero intero, ad esempio, sarebbe troppo lungo per essere mai raggiunto. Ma se si consentono elevate differenze di velocità, potrebbe essere necessario essere molto precisi e di vasta portata, che è necessario pensare alle proprie coordinate. Una soluzione ragionevole sarebbe quella di avere due livelli, come le coordinate intere della griglia e le coordinate float in ogni referenziale della griglia.

Per inciso, potresti anche essere in grado di perseguire correttamente il layout del tuo mondo, usando le coordinate della griglia come seme per creare il tuo mondo casuale in un dato quadrato. Quindi, quando il giocatore lascia l'area, puoi lasciarla cadere, e quando il giocatore ritorna, puoi rigenerarla dal seme.


4
Questo problema può essere aggirato centrando il mondo di tanto in tanto.
Jonathan Fischoff,

Inoltre, sii consapevole non solo dell'involucro dei numeri interi ma delle inesattezze delle piccole variazioni in virgola mobile quando il numero in virgola mobile è elevato. Prova questo: float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos; sulla mia macchina, diff è 0.
tenpn

Questi sono tutti punti positivi. Penso che sarebbe opportuno aggiornare le coordinate ogni volta che viene generato un nuovo set di quadrati, purché sia ​​abbastanza efficiente.
Colin Gislason,

Per inciso, questa è la stessa soluzione della versione PC di Minecraft :) +1 per intero fisso + float che è secondo me la soluzione migliore
GameDeveloper
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.