pyxen.GridBody
Un GridBody es un componente de colisión basado en cuadrícula que interactúa con un GridMap.
Para conceptos de colisión, consulta Colisión.
Constructor
GridBody(
*,
pos=None,
size=None,
move=None,
tag=None,
mask=None
)
Todos los parámetros son solo por nombre.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
pos | (x, y) | Posición inicial en píxeles |
size | (w, h) | Tamaño del cuerpo en píxeles |
move | (x, y) | Vector de movimiento |
tag | int | Etiqueta del cuerpo |
mask | (int, …) | Tupla de etiquetas de tiles con las que colisionar |
Ejemplo
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)
)
)
Adjuntar un GridBody
Durante spawn():
player = world.spawn(
body=GridBody(pos=(32, 32), size=(16, 16))
)
O después:
entity = world.spawn()
entity.body = GridBody(size=(16, 16))
Propiedades
move
Establece el vector de movimiento con una tupla o Vector2i:
body.move = (1, 0)
Leer move devuelve un Vector2i:
m = body.move
print(m.x, m.y)
Propiedades planificadas
| Propiedad | Descripción |
|---|---|
pos | Posición del cuerpo |
size | Tamaño del cuerpo |
tag | Etiqueta del cuerpo |
mask | Máscara de colisión |
Sistema de etiquetas
tag
Cada cuerpo tiene una sola etiqueta:
body.tag = TAG_PLAYER
mask
La máscara define con qué etiquetas colisiona este cuerpo:
body.mask = (TAG_WALL, TAG_MONSTER)
Interacción GridBody + GridMap
Un GridBody colisiona con tiles en un GridMap y otros GridBodies basándose en el filtrado de etiquetas.
GridBody debe ser hijo de una entidad GridMap para que las colisiones se resuelvan.
Ejemplo de movimiento
body = player.body
if input.keyboard.left.down:
body.move = (-1, 0)
if input.keyboard.right.down:
body.move = (1, 0)
Configuración mínima
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,)
)
)
Patrón común: jugador contra paredes
TAG_PLAYER = 1
TAG_WALL = 2
player = world.spawn(
body=GridBody(
pos=(32, 32),
size=(16, 16),
tag=TAG_PLAYER,
mask=(TAG_WALL,)
)
)
Si un tile se establece con:
map.set(row=0, column=5, tag=TAG_WALL)
El jugador colisionará con él.