pyxen.GridMap

Un GridMap es un contenedor espacial formado por celdas organizadas en filas y columnas.

Define la disposición de tiles, el tamaño de celda, el atlas de tiles opcional y el espacio de colisión para GridBody.

Para conceptos de colisión, consulta Colisión.


Constructor

GridMap(
    *,
    rows=None,
    columns=None,
    size=None,
    image=None
)

Todos los parámetros son solo por nombre.


Parámetros

ParámetroTipoDescripción
rowsintNúmero de filas
columnsintNúmero de columnas
size(width, height)Tamaño de celda en píxeles
imagestrNombre de imagen del atlas de tiles

Ejemplo

level_map = GridMap(
    rows=10,
    columns=16,
    size=(16, 16),
    image="tileset"
)

Adjuntar un GridMap

Durante spawn:

level = world.spawn(
    map=GridMap(
        rows=10,
        columns=16,
        size=(16, 16),
        image="tileset"
    )
)

O después:

entity = world.spawn()
entity.map = GridMap(rows=8, columns=8, size=(16, 16))

Propiedades

map.active

PropiedadTipoPor defecto
activeboolTrue

Controla si la simulación de colisiones se ejecuta para este mapa. Cuando es False, no se procesan movimientos de cuerpos, colisiones ni callbacks para ningún GridBody adjunto a este mapa.

# Pausar colisiones (ej. menú de pausa)
level.map.active = False

# Reanudar colisiones
level.map.active = True

Modificar tiles

Usa map.set() para configurar tiles.

map.set(
    row=0,
    column=1,
    tile=(tile_column, tile_row),
    tag=optional_tag
)

Parámetros

ParámetroTipoDescripción
rowintÍndice de fila de la cuadrícula
columnintÍndice de columna de la cuadrícula
tile(x, y)Coordenadas del tile en el atlas
tagintEtiqueta de colisión opcional

Ejemplo: establecer un tile

level.map.set(
    row=2,
    column=5,
    tile=(3, 1)
)

Ejemplo: añadir etiqueta de colisión

level.map.set(
    row=4,
    column=2,
    tile=(0, 0),
    tag=1  # wall
)

Coordenadas de la cuadrícula

  • Las filas aumentan verticalmente
  • Las columnas aumentan horizontalmente

Los índices fuera de los límites se ignoran de forma segura.


GridMap + GridBody

Un GridBody interactúa con el GridMap para colisión, resolución de movimiento y detección de disparadores.

GridBody debe ser hijo de la entidad GridMap.

level = world.spawn(
    map=GridMap(
        rows=8,
        columns=8,
        size=(16, 16),
        image="tiles"
    )
)

player = world.spawn(
    body=GridBody(),
    parent=level
)

Ejemplo mínimo: nivel básico

level = world.spawn(
    map=GridMap(
        rows=8,
        columns=8,
        size=(16, 16),
        image="tiles"
    )
)

# Crear suelo
for r in range(8):
    for c in range(8):
        level.map.set(row=r, column=c, tile=(0, 0))

# Crear paredes
for c in range(8):
    level.map.set(row=0, column=c, tile=(1, 0), tag=1)
    level.map.set(row=7, column=c, tile=(1, 0), tag=1)

Etiquetas

tag es metadato opcional por tile.

Usos típicos:

  • 0 — vacío
  • 1 — pared
  • 2 — agua
  • 3 — zona de daño

Las etiquetas son interpretadas por tu sistema de juego o colisión.