¿Representación de nivel / estructura de datos adecuada para un juego de plataformas 2D?


9

Estoy a punto de programar una copia de Mario en Java. Estoy pensando en 2 representaciones / estructuras de datos para los niveles, pero no estoy seguro de cuál debería elegir:

  • Una matriz de enteros en 2D.
  • Un quadtree para dividir el nivel en pedazos.

¿Cuáles son sus ventajas y desventajas?

Respuestas:


9

El objetivo de un árbol cuádruple es eliminar eficientemente grandes porciones de datos para que solo pase tiempo en los datos en las inmediaciones. Sin embargo, una matriz 2D ya le brinda acceso aleatorio específico de ubicación, por lo que para un juego 2D que puede hacer que un quadtree sea redundante. En un juego 3D no puedes usar una matriz para localizar todo y ahí es donde los cuadrúteros (o mejor aún, los octreos) son útiles.

Ahora, estoy hablando aquí sobre la representación de datos subyacente para el nivel. Dependiendo de cómo esté configurada su arquitectura gráfica (por ejemplo, haciendo gráficos 2D con planos en un motor 3D), es posible que desee utilizar cuadrúpedos en el gráfico de la escena para eliminar de manera eficiente el contenido gráfico.

Y luego no olvides varios enemigos y otros objetos interactivos en tu nivel. Quizás use una matriz 2D para administrar los mosaicos del nivel, pero use cuadrúpedos para organizar todos los elementos interactivos (por ejemplo, para un motor de física).


Piénselo de esta manera: elija un punto al azar en su nivel, y luego piense en cuánto trabajo tomará resolver todo dentro de un radio de 1000 píxeles de ese punto. Si puede hacerlo rápidamente porque todo está organizado por ubicación en una matriz 2D, entonces no necesita un quadtree. Sin embargo, si tuviera que recorrer todo y verificar la distancia de cada objeto individualmente, entonces podría hacer que la búsqueda sea mucho más eficiente utilizando un quadtree.

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.