2009-04-08 12 views
9

Estoy en el proceso de escribir un pequeño juego de rol de vista aérea muy en la línea de la clásica serie Ultima. Necesito una forma rápida y sucia (más rápida que la sucia) de diseñar mapas grandes, digamos 1000 tiles x 1000 tiles, y necesito ayuda para pensar cómo hacerlo.La mejor manera de crear un mapa de juego

Yo diría que hay un buen 50-60 diferentes tipos de baldosas - bosques, ríos, llanuras, etc.

Hasta ahora, lo mejor que se le ocurrió fue

  • definen una matriz (o una estructura similar) para contener dos elementos clave de información: un identificador de ubicación/coordenadas y un número entero de 1-60 que define qué tipo de mosaico es.

  • en una aplicación de edición de trama, dibuje una imagen de 1000px x 1000px. Usando una paleta de 50 colores diferentes, dibujo mi mapa - 1 píxel corresponde a 1 azulejo. Digamos que para una baldosa de agua determinada, dibujaré un grupo de píxeles en un cierto tono de azul. Guardar como .gif o .png.

  • escribe un procesador que luego analiza el gif/jpg antes mencionado y lo analiza píxel por píxel. Según el valor RGB del píxel, determina el tipo de mosaico. El procesador luego genera un código de algunas rutinas que pueblan la matriz del mapa.

Hasta ahora, creo que debe haber una manera más fácil.

Respuesta

2

suena como una muy buena manera para mí. Sin embargo, es posible que la creación de un generador de mapas personalizado sea casi igual de fácil.

Otra opción podría ser escribir un programa que le permita simplemente definir la ubicación de las principales características, y un programa de generador completará el resto. (Por ejemplo: Río que corre de x1, y1 a x2, y2. Bosque "grande" centrado en x, y, etc.). Eso podría permitirle definir un mapa grande solo a partir de un archivo más pequeño de características geográficas. Piense que es algo así como hacer un dibujo vectorial en lugar de especificar hasta el último píxel en un ráster. :-)

11

¿Tiene que estar basado en mosaicos? Echar un vistazo en el sitio de Daniel Cook, Lost Garden, no sólo se le dan algunos sabrosos obra libre, pero discute el advenimiento de la asignación arbitraria de imágenes en los juegos, en lugar de las baldosas:

"Érase una vez, que tenía que utilizar pequeños azulejos cuadrados para todo. en la actualidad, no existe una verdadera necesidad de hacer un motor 2D basado azulejo. con imágenes arbitrarias con plena alfa y un montón de velocidad de llenado, se puede poner juntos un juego como un libro de pegatinas. Deja caer tus gráficos en posiciones arbitrarias y capa como un loco. Juegos como Aquaria se ve muy bien y azulejos no se ven por ningún lado."

también hay un eslabón de allí por step-by-step instructions en la fabricación de un editor en el juego basado en IndieLib.

+1

1 para salir de la caja de pensamiento! ¡Estaré aquí toda la noche, amigos! –

1

Otra opción sería la de generar el (píxel) mapa o directamente el mapa del juego. Esto, por supuesto, Dependiendo del tamaño de su mundo, y si tiene muchos recursos específicos (una ciudad en este punto, una mina en este momento ...)

Hubo muchos artículos sobre este tema en el sitio sobre el juego "pícaro", que podría ser bastante útil. (intente RogueBassin por ejemplo)

También hablan de la estructura de datos para permitir más variaciones (como tener una imagen base y agregar aleatoriamente una cantidad de imágenes "pequeñas" (pequeñas) cuando define la representación en su matriz de mapas. Por ejemplo, para agregar una pequeña roca a la hierba). Otros efecto, como parece en la última V, donde algún elemento del techo se volvió transparente al pasar por debajo de ellos, también se basan en esta estructura.

Descubrimos que tener una imagen (en nuestro caso, un conjunto de imágenes) es fácil, ya que puedes actualizar el aspecto (¡no más bosque rectangular!) Cuando tienes tiempo y concentrarte en la ubicación de la misión específica .

respecto

Guillaume

2

lo recomiendo tener su información de posición sean la información de indexación para la estructura de datos de almacenamiento, en lugar de algo que está mirando hacia arriba en ella. ES DECIR.

int get_terrain_type(int x, int y) { 
    return terrain[x][y]; 
} 

(No del todo seguro de que no es lo que quería decir, pero pensé que había puesto ahí fuera.)

Cuestiones relacionadas