Mapas y plataformas
En los años 80 uno de los géneros de videojuegos mas celebrados ha sido el genero de plataformas.
En los juegos de este género el protagonista de la aventura estaba en un escenario armado de bloques y plataformas en donde podía saltar.
Uno de los juegos mas populares de esos días era Super Mario Bros.
Pilas incluye un actor llamado Mapa
que te permite
hacer juegos de plataformas fácilmente.
Presentando el actor Mapa
El Mapa
representa un escenario compuesto de bloques
que pueden ser plataformas, muros o simplemente adornos
del escenario.
Para crear un Mapa
necesitas una grilla de gráficos con los bloques
que se usarán en el escenario. Luego puedes crear el Mapa
:
grilla = pilas.imagenes.cargar_grilla("grillas/plataformas_10_10.png", 10, 10)
mapa = pilas.actores.Mapa(grilla)
Una vez que ejecutas esas sentencias no observarás cambios en la ventana, el mapa está, pero no tiene bloques aún.
Si quieres dibujar bloques solo tienes que indicar un índice de bloque y la posición en pantalla a dibujar.
Por ejemplo, un bloque cerca del centro de la ventana es la posición (8, 10):
mapa.pintar_bloque(8, 10, 1)
Otro ejemplo: si queremos dibujar en la parte inferior de la
ventana, podemos llamar muchas veces al método pintar_bloque
, una
vez por cada bloque que necesitamos:
for columna in range(20):
mapa.pintar_bloque(14, columna, 1)
El primer y segundo argumento del método pintar_bloque
indica
la posición en donde vamos a dibujar el bloque. En este caso la
fila será 14 y la columna será 0, 1, 2, 3, 4.. etc
El tercer argumento será el índice de la grilla que indicamos anteriormente.
Colisiones con el escenario
En los juegos de plataformas es muy importante que los bloques puedan interactuar con los jugadores. Por ejemplo habrá bloques que sirvan como plataformas y otros impedirán que avancemos como si se trataran de muros.
Los mapas de pilas te permiten crear esta interacción de manera
sencilla. El método que usamos antes pintar_bloque
, le
dice al mapa que dibuje el bloque, pero a la vez te permite
indicar si ese bloque es sólido o no.
Diremos que un bloque es sólido cuando un personaje no puede pasar a través de él. Por ejemplo, una plataforma es un bloque sólido.
Entonces, cada vez que invocas al método pintar_bloque
tienes
la posibilidad de indicar si el bloque es sólido o no:
mapa.pintar_bloque(14, 10, 1, es_bloque_solido=True)
mapa.pintar_bloque(14, 10, 1, es_bloque_solido=False)
Y ten en cuenta que si no especificas el último parámetro, pilas asumirá que el bloque debe ser sólido.
Por cierto, los bloques "no sólidos" son útiles para representar adornos del escenario, como nubes o agua. Incluso en algunos juegos se usan para crear pasadizos secretos entre muros o plataformas...
Creando mapas con el programa tiled
Crear los mapas directamente desde el código está bien, pero si tienes que hacer muchos mapas te llevará un montón de tiempo.
Una buena alternativa a esto es usar un software de diseño de escenarios, crear un archivo con todo el escenario y luego cargarlo desde pilas.
El software que te recomiendo para esta tarea se llama tiled
(ver http://www.mapeditor.org).
Veamos como usar tiled para crear un escenario sencillo, primero
tienes que crear un mapa desde el menú File
, se le solicitará
indicar el tamaño del escenario:
Usa los valores por defecto, al menos por esta vez.
Luego tienes que ir al menú Map
y luego New tileset
para
indicar cual es la grilla de imágenes que usarás en los bloques. Te
recomiendo usar la imagen batalhao.png
(de Silveins Neto), que
está en la carpeta de ejemplos de pilas:
Ahora, lo mas divertido, comienza a dibujar sobre el escenario seleccionando bloques. Observa que el programa tiene varias herramientas para hacer que esto sea mucho mas sencillo:
Luego, asegúrate de que el programa guarda todos los datos en formato CSV, esto
es importante para que se pueda vincular con pilas. Para esto tienes
que abrir el menú Edit
y luego Preferences
, la pantalla de opciones
te tiene que quedar así:
Listo, ahora solamente hay que guardar el mapa en un archivo. Ve al menú
File
y luego selecciona Save as
, tienes que darle un nombre
al archivo .tmx
.
Luego, desde pilas, es muy simple, solamente tienes que crear
el actor mapa indicando el nombre del archivo .tmx
que has
generado con el programa tiled:
import pilas
pilas.iniciar()
mapa_desde_archivo = pilas.actores.MapaTiled("archivo.tmx")
Creando bloques sólidos con tiled
Si quieres hacer bloques sólidos desde tiled solamente tienes que crear una capa especial. Si una de las capas comienza con el nombre "solido" entonces pilas hará que cada uno de los bloques sea interpretado como un bloque sólido.
Por ejemplo, en el escenario anterior, sería interesante colocar los bloques de pasto y la ruta en la capa que he llamado "suelo" y el resto de los objetos en otras capas que serán sólidas, en este caso "solido obstáculos" y "solido paredes":
Un ejemplo completo
Te recomiendo que observes el ejemplo mapa_desde_archivo.py
del
directorio de ejemplos de pilas, podrás observar un escenario
muy simple con obstáculos y un personaje que se puede mover
con el teclado:
O bien, el ejemplo plataformas
.