En esta sección aprenderás qué son los tilemaps, cómo crearlos y cargarlos en Phaser, y cómo utilizarlos para construir mundos de juego complejos y eficientes. Los tilemaps son una herramienta fundamental en el desarrollo de juegos 2D, especialmente para plataformas, RPGs y aventuras.


¿Qué es un Tilemap?

Un tilemap es una cuadrícula compuesta por pequeñas imágenes llamadas tiles (baldosas). Cada tile representa una parte del mundo del juego, como suelo, paredes, agua, etc. Al combinar muchos tiles, puedes crear mapas grandes y detallados de manera eficiente.

Ventajas de los Tilemaps

  • Eficiencia: Permiten construir mundos grandes reutilizando imágenes pequeñas.
  • Flexibilidad: Puedes modificar el mapa fácilmente cambiando la disposición de los tiles.
  • Rendimiento: Phaser optimiza la renderización de tilemaps para juegos 2D.

Tipos de Tilemaps en Phaser

Tipo de Tilemap Descripción Formato de Archivo
Orthogonal Cuadrícula regular, como un tablero de ajedrez. .json (Tiled), .csv
Isométrico Perspectiva en ángulo, útil para juegos de simulación. .json (Tiled)
Hexagonal Celdas en forma de hexágono, menos común. .json (Tiled)

En este curso nos centraremos en los tilemaps ortogonales, los más usados y fáciles de implementar.


Herramientas para Crear Tilemaps

  • Tiled Map Editor: Herramienta gratuita y popular para crear tilemaps y exportarlos en formato .json.
  • Aseprite, Pyxel Edit, Photoshop: Para crear tus propios tilesets (las imágenes de los tiles).

Estructura de un Tilemap

Un tilemap generalmente consta de:

  • Tileset: Imagen que contiene todos los tiles.
  • Mapa: Archivo (JSON o CSV) que indica la posición de cada tile en la cuadrícula.
  • Capas: Permiten separar el fondo, objetos, colisiones, etc.

Cargando un Tilemap en Phaser

  1. Preparar los Archivos

  • Un archivo .json exportado desde Tiled.
  • Una imagen de tileset (por ejemplo, tiles.png).

  1. Cargar los Recursos

Utiliza el método this.load en la función preload de tu escena.

preload() {
  // Cargar el tilemap en formato JSON
  this.load.tilemapTiledJSON('mapa', 'assets/mapa.json');
  // Cargar el tileset
  this.load.image('tiles', 'assets/tiles.png');
}

Explicación:

  • 'mapa' es la clave para referenciar el tilemap.
  • 'tiles' es la clave para el tileset.

  1. Crear el Tilemap y las Capas

En el método create de tu escena:

create() {
  // Crear el tilemap a partir del JSON cargado
  const map = this.make.tilemap({ key: 'mapa' });

  // Añadir el tileset al mapa
  const tileset = map.addTilesetImage('nombreEnTiled', 'tiles');

  // Crear una capa a partir del tilemap
  const capaFondo = map.createLayer('Fondo', tileset, 0, 0);
}

Explicación:

  • 'nombreEnTiled' debe coincidir con el nombre del tileset en Tiled.
  • 'Fondo' es el nombre de la capa en Tiled.
  • 0, 0 son las coordenadas donde se dibuja la capa.

Ejemplo Completo

Supón que tienes estos archivos:

  • assets/mapa.json (exportado desde Tiled)
  • assets/tiles.png (tu tileset)
  • En Tiled, el tileset se llama tileset_juego y la capa se llama Fondo.
class MundoJuego extends Phaser.Scene {
  preload() {
    this.load.tilemapTiledJSON('mapa', 'assets/mapa.json');
    this.load.image('tiles', 'assets/tiles.png');
  }

  create() {
    const map = this.make.tilemap({ key: 'mapa' });
    const tileset = map.addTilesetImage('tileset_juego', 'tiles');
    const fondo = map.createLayer('Fondo', tileset, 0, 0);
  }
}

Ejercicio Práctico

Objetivo: Cargar y mostrar un tilemap simple en Phaser.

Instrucciones

  1. Descarga un tileset y crea un mapa sencillo en Tiled (puedes usar un tileset gratuito de OpenGameArt).
  2. Exporta el mapa como mapa.json y guarda el tileset como tiles.png en la carpeta assets.
  3. Crea una escena en Phaser que cargue y muestre el tilemap.

Solución

class MiEscena extends Phaser.Scene {
  preload() {
    this.load.tilemapTiledJSON('mapa', 'assets/mapa.json');
    this.load.image('tiles', 'assets/tiles.png');
  }

  create() {
    const map = this.make.tilemap({ key: 'mapa' });
    const tileset = map.addTilesetImage('nombreDelTilesetEnTiled', 'tiles');
    const capa = map.createLayer('NombreDeLaCapaEnTiled', tileset, 0, 0);
  }
}

const config = {
  type: Phaser.AUTO,
  width: 800,
  height: 600,
  scene: MiEscena
};

const game = new Phaser.Game(config);

Nota: Cambia 'nombreDelTilesetEnTiled' y 'NombreDeLaCapaEnTiled' por los nombres reales usados en Tiled.


Errores Comunes y Consejos

Error Común Causa Solución
El mapa no se muestra El nombre del tileset o la capa no coincide con Tiled Verifica los nombres en Tiled y en el código
Tiles desalineados Tamaño de tile incorrecto Asegúrate de que el tamaño del tile en Tiled y Phaser coincidan
Archivos no encontrados Rutas incorrectas Verifica la ruta de los archivos en tu proyecto

Consejo: Siempre revisa la consola del navegador para mensajes de error. Te ayudarán a identificar problemas de carga o nombres incorrectos.


Resumen

  • Los tilemaps permiten crear mundos de juego grandes y eficientes usando pequeñas imágenes reutilizables.
  • Utiliza herramientas como Tiled para diseñar tus mapas y exportarlos en formato JSON.
  • En Phaser, carga el tilemap y el tileset en preload, y crea las capas en create.
  • Presta atención a los nombres de tileset y capas: deben coincidir entre Tiled y tu código.
  • Practica creando y cargando tus propios mapas para dominar este proceso.

¡Ahora estás listo para construir mundos de juego complejos y visualmente atractivos en Phaser! En la siguiente sección aprenderás a controlar la cámara y el desplazamiento para explorar estos mundos.

Phaser - Desarrollo de Juegos con JavaScript

Módulo 1: Introducción al Desarrollo de Juegos y Phaser

Módulo 2: Fundamentos de Phaser

Módulo 3: Sprites y Animación

Módulo 4: Física e Interactividad en el Juego

Módulo 5: Mundo del Juego y Cámara

Módulo 6: Audio e Interfaz de Usuario

Módulo 7: Arquitectura del Juego y Gestión de Estados

Módulo 8: Características Avanzadas de Jugabilidad

Módulo 9: Despliegue y Optimización

Módulo 10: Proyecto Final

© Copyright 2024. Todos los derechos reservados