pyxen.GridBody
Un GridBody est un composant de collision sur grille qui interagit avec un GridMap.
Pour les concepts de collision, consultez Collision.
Constructeur
GridBody(
*,
pos=None,
size=None,
move=None,
tag=None,
mask=None
)
Tous les paramètres sont par mot-clé uniquement.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
pos | (x, y) | Position initiale en pixels |
size | (w, h) | Taille du corps en pixels |
move | (x, y) | Vecteur de déplacement |
tag | int | Tag du corps |
mask | (int, …) | Tuple de tags de tuiles avec lesquels collisionner |
Exemple
e = world.spawn(
name="hero",
sprite=sprite,
layer=LAYER_HERO,
body=GridBody(
pos=(64, 64),
size=(16, 16),
move=(0, 0),
tag=TAG_PLAYER,
mask=(TAG_WALL, TAG_MONSTER)
)
)
Attacher un GridBody
Lors du spawn() :
player = world.spawn(
body=GridBody(pos=(32, 32), size=(16, 16))
)
Ou plus tard :
entity = world.spawn()
entity.body = GridBody(size=(16, 16))
Propriétés
move
Définir le vecteur de déplacement avec un tuple ou un Vector2i :
body.move = (1, 0)
La lecture de move renvoie un Vector2i :
m = body.move
print(m.x, m.y)
Propriétés prévues
| Propriété | Description |
|---|---|
pos | Position du corps |
size | Taille du corps |
tag | Tag du corps |
mask | Masque de collision |
Système de tags
tag
Chaque corps possède un seul tag :
body.tag = TAG_PLAYER
mask
Le masque définit avec quels tags ce corps entre en collision :
body.mask = (TAG_WALL, TAG_MONSTER)
Interaction GridBody + GridMap
Un GridBody entre en collision avec les tuiles d’un GridMap et d’autres GridBodies en fonction du filtrage par tags.
Le GridBody doit être un enfant d’une entité GridMap pour que les collisions soient résolues.
Exemple de déplacement
body = player.body
if input.keyboard.left.down:
body.move = (-1, 0)
if input.keyboard.right.down:
body.move = (1, 0)
Configuration minimale
level = world.spawn(
map=GridMap(
rows=10,
columns=10,
size=(16, 16)
)
)
player = world.spawn(
parent=level,
body=GridBody(
pos=(16, 16),
size=(16, 16),
tag=1,
mask=(2,)
)
)
Pattern courant : Joueur contre murs
TAG_PLAYER = 1
TAG_WALL = 2
player = world.spawn(
body=GridBody(
pos=(32, 32),
size=(16, 16),
tag=TAG_PLAYER,
mask=(TAG_WALL,)
)
)
Si une tuile est définie avec :
map.set(row=0, column=5, tag=TAG_WALL)
Le joueur entrera en collision avec elle.