Razón Artificial

La ciencia y el arte de crear videojuegos

Engine VIII: La clase Mapa II

Escrito por adrigm el 11 de junio de 2010 en Desarrollo Videojuegos, Noticias, Programación | 3 Comentarios.

Por ahora hemos conseguido tener una forma de hacer mapas y extraer su información del archivo XML para poder manejarla con Python, en el anterior tutorial quizás no quedo claro como almecenamos los tiles del mapa y en este tutorial quiero dejar claro como lo hacemos pues es clave para entender la representación del mapa.

A través del método cargar_mapa hemos extraído muchos valores de nuestro XML, que podemos visualizar con unos cuantos prints, pero el más importante de  ellos es el valor de self.capas que es un array tridimensional, es una lista que en su interior contiene todas las listas de las capas de nuestro mapa por orden, es decir, primero la de más abajo, luego la siguiente y así hasta la superior. Esta variable no contiene las listas de objetos, ojo, solo las de tilesets. Si imprimimos el tamaño de nuestra lista veremos que el valor devuelto es 3 porque nuestro mapa esta compuesto de 3 capas.

def main():
	mapa = Mapa("bosque.tmx")
	print len(mapa.capas)
	return 0

cada una de estas 3 listas esta a su ve compuesta en un array bidimensional de filas y columnas, que representan a todo nuestro mapa y a los tileset que hay en esa posición, veamos.

def main():
	mapa = Mapa("bosque.tmx")
	print mapa.capas[0]
	return 0

como ves si imprimimos el primer valor de la lista nos muestra un array bidimensional que contiene unos valores enteros, si miráis vuestro tileset veréis que ese valor se corresponde corresponde con el cuadro de tile de nuestro tileset. por ejemplo, si estás usando el tileset que he subido y tengo toda mi capa inferior cubierta de hierba veremos que nuestra lista arroja una gran capa de 9 y si miramos nuestro tileset veremos que el tile hierba ocupa la posición 9.

Observemos que el tileset se almacena en un array unidimensional, una lista de tiles que es nuestra paleta. En el siguiente tutorial crearemos esa paleta a partir de nuestro tileset.

3 Comentarios en "Engine VIII: La clase Mapa II"

  1. Bline dice:

    Creo que más o menos ya entiendo como funciona. En mi caso me hice un mapa de 4×4 con tiles de 32×32 ( el tile es de 64×32 ) con sólo 2 elementos ordenados asi → [1][2]. La capa 1 simplemente estaba toda rellena del elemento [1] mientras que en la segunda era todo “transparente” salvo el elemento de la matrix 3x 2y que estaba el elemento [2]. A la hora de imprimir el contenido de las casillas desde el xml me puso:

    [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
    [[0, 0, 0, 0], [0, 0, 2, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

    Que ordenado sería equivalente a la representación de las casillas en las 2 capas del siguiente modo:

    Capa 1 ( todo relleno con el elemento [1] )
    [1, 1, 1, 1]
    [1, 1, 1, 1]
    [1, 1, 1, 1]
    [1, 1, 1, 1]

    Capa 2 ( todo vacío salvo el elemento 3x,2y que era el objeto en el tile nº2 )
    [0, 0, 0, 0]
    [0, 0, 2, 0]
    [0, 0, 0, 0]
    [0, 0, 0, 0]

    Me imagino que el siguiente paso en el engine será hacer el sistema que cargue la imagen del tile e imprima la sección entre los puntos:

    [elemento-1]*tamañoX , [elemento-1]*tamaño2X
    [elemento-1]*tamañoY , [elemento-1]*tamaño2Y

    que darían las coordenadas de los 4 puntos para extraer el segmento de la imagen correspondiente.

    Espero al menos haber ayudado un poco a pesar de ser un mero comentario de aficionado que no tiene ( de momento ) ni puta idea de python salvo a nivel básico de consola xD

  2. admin dice:

    Vas bien encaminado, mira el próximo tuturial que está a punto de ser publicado, en el cortamos el tileset.

    Por cierto, gran representación y ejemplo que has puesto, puede que así quede más claro para el que no lo entienda bien. Muchas gracias por colaborar, vuestros comentarios mejoran los tutoriales.

  3. […] Engine VIII: La clase Mapa II […]

Deja un comentario