pyxen.GridMap

Un GridMap est un conteneur spatial composé de cellules organisées en lignes et colonnes.

Il définit la disposition des tuiles, la taille des cellules, l’atlas de tuiles optionnel, et l’espace de collision pour les GridBody.

Pour les concepts de collision, consultez Collision.


Constructeur

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

Tous les paramètres sont par mot-clé uniquement.


Paramètres

ParamètreTypeDescription
rowsintNombre de lignes de la grille
columnsintNombre de colonnes de la grille
size(width, height)Taille des cellules en pixels
imagestrNom de l’image atlas de tuiles

Exemple

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

Attacher un GridMap

Lors du spawn :

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

Ou plus tard :

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

Propriétés

map.active

PropriétéTypeDéfaut
activeboolTrue

Contrôle si la simulation de collision est active pour cette map. Lorsque la valeur est False, aucun déplacement, collision ou callback n’est traité pour les GridBody attachés à cette map.

# Mettre en pause les collisions (ex. menu pause)
level.map.active = False

# Reprendre les collisions
level.map.active = True

Modifier les tuiles

Utilisez map.set() pour configurer les tuiles.

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

Paramètres

ParamètreTypeDescription
rowintIndex de la ligne de la grille
columnintIndex de la colonne de la grille
tile(x, y)Coordonnées de la tuile dans l’atlas
tagintTag de collision optionnel

Exemple : Définir une tuile

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

Exemple : Ajouter un tag de collision

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

Coordonnées de la grille

  • Les lignes augmentent verticalement
  • Les colonnes augmentent horizontalement

Les indices hors limites sont ignorés en toute sécurité.


GridMap + GridBody

Un GridBody interagit avec le GridMap pour la collision, la résolution de déplacement et la détection de déclencheurs.

Le GridBody doit être un enfant de l’entité GridMap.

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

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

Exemple minimal : Niveau basique

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

# Créer le sol
for r in range(8):
    for c in range(8):
        level.map.set(row=r, column=c, tile=(0, 0))

# Créer les murs
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 est une métadonnée optionnelle par tuile.

Utilisations typiques :

  • 0 — vide
  • 1 — mur
  • 2 — eau
  • 3 — zone de dégâts

Les tags sont interprétés par votre système de gameplay ou de collision.