pyxen.GridMap

Eine GridMap ist ein räumlicher Container aus Zellen, die in Zeilen und Spalten angeordnet sind.

Sie definiert das Tile-Layout, die Zellgröße, einen optionalen Tile-Atlas und den Kollisionsraum für GridBody.

Kollisionskonzepte findest du unter Kollision.


Konstruktor

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

Alle Parameter sind Keyword-only.


Parameter

ParameterTypBeschreibung
rowsintAnzahl der Rasterzeilen
columnsintAnzahl der Rasterspalten
size(width, height)Zellgröße in Pixeln
imagestrName des Tile-Atlas-Bildes

Beispiel

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

Eine GridMap anhängen

Beim Spawn:

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

Oder nachträglich:

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

Eigenschaften

map.active

EigenschaftTypStandard
activeboolTrue

Steuert, ob die Kollisionssimulation für diese Map läuft. Bei False werden keine Körperbewegungen, Kollisionen oder Callbacks für GridBody-Objekte dieser Map verarbeitet.

# Kollisionen pausieren (z.B. Pausenmenü)
level.map.active = False

# Kollisionen fortsetzen
level.map.active = True

Tiles bearbeiten

Verwende map.set(), um Tiles zu konfigurieren.

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

Parameter

ParameterTypBeschreibung
rowintRasterzeilen-Index
columnintRasterspalten-Index
tile(x, y)Tile-Koordinaten im Atlas
tagintOptionaler Kollisions-Tag

Beispiel: Ein Tile setzen

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

Beispiel: Kollisions-Tag hinzufügen

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

Rasterkoordinaten

  • Zeilen nehmen vertikal zu
  • Spalten nehmen horizontal zu

Indizes außerhalb der Grenzen werden sicher ignoriert.


GridMap + GridBody

Ein GridBody interagiert mit der GridMap für Kollision, Bewegungsauflösung und Trigger-Erkennung.

GridBody muss ein Kind des GridMap-Entity sein.

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

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

Minimalbeispiel: Einfaches Level

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

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

# Wände erstellen
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)

Tags

tag ist optionale Metadaten pro Tile.

Typische Verwendung:

  • 0 — leer
  • 1 — Wand
  • 2 — Wasser
  • 3 — Schadenszone

Tags werden von deiner Spiellogik oder deinem Kollisionssystem interpretiert.