pyxen.GridBody
GridBodyはGridMapと連携するグリッドベースの衝突コンポーネントです。
衝突のコンセプトについては衝突判定を参照してください。
コンストラクタ
GridBody(
*,
pos=None,
size=None,
move=None,
tag=None,
mask=None
)
すべてのパラメータはキーワード専用です。
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
pos | (x, y) | ピクセル単位の初期位置 |
size | (w, h) | ピクセル単位のボディサイズ |
move | (x, y) | 移動ベクトル |
tag | int | ボディタグ |
mask | (int, …) | 衝突するタイルタグのタプル |
例
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)
)
)
GridBodyのアタッチ
spawn()時:
player = world.spawn(
body=GridBody(pos=(32, 32), size=(16, 16))
)
または後から:
entity = world.spawn()
entity.body = GridBody(size=(16, 16))
プロパティ
move
タプルまたはVector2iで移動ベクトルを設定:
body.move = (1, 0)
moveを読み取るとVector2iが返されます:
m = body.move
print(m.x, m.y)
予定されているプロパティ
| プロパティ | 説明 |
|---|---|
pos | ボディの位置 |
size | ボディのサイズ |
tag | ボディタグ |
mask | 衝突マスク |
タグシステム
tag
各ボディは1つのタグを持ちます:
body.tag = TAG_PLAYER
mask
マスクはこのボディがどのタグと衝突するかを定義します:
body.mask = (TAG_WALL, TAG_MONSTER)
GridBody + GridMapの連携
GridBodyはGridMap内のタイルおよび他のGridBodyと、タグフィルタリングに基づいて衝突します。
衝突を解決するには、GridBodyはGridMapエンティティの子でなければなりません。
移動の例
body = player.body
if input.keyboard.left.down:
body.move = (-1, 0)
if input.keyboard.right.down:
body.move = (1, 0)
最小セットアップ
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,)
)
)
一般的なパターン:プレイヤー vs 壁
TAG_PLAYER = 1
TAG_WALL = 2
player = world.spawn(
body=GridBody(
pos=(32, 32),
size=(16, 16),
tag=TAG_PLAYER,
mask=(TAG_WALL,)
)
)
タイルが以下のように設定されている場合:
map.set(row=0, column=5, tag=TAG_WALL)
プレイヤーはそのタイルと衝突します。