Generación procesal de nivel infinito


16

¿Cuáles son algunos buenos enfoques para generar procesalmente un nivel 2d infinito? El nivel podría estar limitado en cualquier dimensión, pero no necesariamente.

El enfoque que tiene más sentido para mí hasta ahora es usar un radio basado en cuadrícula. por ejemplo, divida el área de juego en una cuadrícula con cuadrados de cierto tamaño y luego cargue X cuadrados en un radio alrededor del jugador. Luego, cuando el jugador se mueve a otra casilla, construye el siguiente set y suelta más lejos (no es necesario el área explorada persistente). Cuando se construye una casilla, contiene una disposición aleatoria de objetos. Cuando los objetos abandonan el anillo exterior de los cuadrados, se eliminan del mundo. ¿Hay formas mejores o diferentes? O si este es un buen enfoque, ¿cuáles son los posibles problemas?

En aras de la discusión, puede pensar en el nivel como un campo de asteroides de arriba hacia abajo con potenciadores, etc. dispersos por todas partes.


2
Esto parece estar relacionado: gamedev.stackexchange.com/questions/2230/…
jacmoe

^ y así está en la columna "Relacionado" en el lado derecho. No es necesario vincular.
Ricket

77
Y luego se convirtió en "vinculado", así como "relacionado" - ordenado, ¿eh? :)
jacmoe

Respuestas:


6

Un problema con los mundos "infinitos" es que sus coordenadas subyacentes podrían no ser infinitas. A veces, si el juego ralentiza al jugador lo suficiente, puede que no sea una preocupación, porque el tiempo para alcanzar el número entero, por ejemplo, sería demasiado largo para llegar a él. Pero si permite grandes diferencias en la velocidad, es posible que deba ser muy preciso y de gran alcance, que necesitaría pensar en sus coordenadas. Una solución razonable sería tener dos niveles, como las coordenadas enteras de la cuadrícula y las coordenadas flotantes en cada referencia de la cuadrícula.

Por otro lado, incluso podría ser capaz de persistir adecuadamente en el diseño de su mundo, utilizando las coordenadas de la cuadrícula como una semilla para crear su mundo aleatorio en un cuadrado determinado. Entonces, cuando el jugador abandona el área, puedes soltarla y cuando el jugador regrese, puedes regenerarla desde la semilla.


44
Este problema se puede evitar centrando el mundo de vez en cuando.
Jonathan Fischoff el

También tenga en cuenta no solo la envoltura entera sino también las imprecisiones de los pequeños cambios de coma flotante cuando el número de coma flotante es alto. Prueba esto: float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos; En mi máquina, diff es 0.
tenpn

Todos estos son buenos puntos. Creo que sería apropiado volver a centrar las coordenadas cada vez que se genera un nuevo conjunto de cuadrados, siempre que sea lo suficientemente eficiente.
Colin Gislason

Por cierto, esta es la misma solución que en la versión para PC de Minecraft :) +1 para entero fijo + flotante, que en mi opinión es la mejor solución
GameDeveloper
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.