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
| Parameter | Typ | Beschreibung |
|---|---|---|
rows | int | Anzahl der Rasterzeilen |
columns | int | Anzahl der Rasterspalten |
size | (width, height) | Zellgröße in Pixeln |
image | str | Name 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
| Eigenschaft | Typ | Standard |
|---|---|---|
active | bool | True |
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
| Parameter | Typ | Beschreibung |
|---|---|---|
row | int | Rasterzeilen-Index |
column | int | Rasterspalten-Index |
tile | (x, y) | Tile-Koordinaten im Atlas |
tag | int | Optionaler 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— leer1— Wand2— Wasser3— Schadenszone
Tags werden von deiner Spiellogik oder deinem Kollisionssystem interpretiert.