pyxen.GridMap

GridMapは行と列に配置されたセルで構成される空間コンテナです。

タイルレイアウト、セルサイズ、オプションのタイルアトラス、およびGridBodyの衝突空間を定義します。

衝突のコンセプトについては衝突判定を参照してください。


コンストラクタ

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

すべてのパラメータはキーワード専用です。


パラメータ

パラメータ説明
rowsintグリッドの行数
columnsintグリッドの列数
size(width, height)ピクセル単位のセルサイズ
imagestrタイルアトラス画像名

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

GridMapのアタッチ

生成時:

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

または後から:

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

プロパティ

map.active

プロパティデフォルト
activeboolTrue

このマップの衝突シミュレーションを実行するかどうかを制御します。Falseの場合、このマップにアタッチされたGridBodyのボディ移動、衝突、コールバックは処理されません。

# 衝突を一時停止(例:ポーズメニュー)
level.map.active = False

# 衝突を再開
level.map.active = True

タイルの変更

map.set()でタイルを設定します。

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

パラメータ

パラメータ説明
rowintグリッドの行インデックス
columnintグリッドの列インデックス
tile(x, y)アトラス内のタイル座標
tagintオプションの衝突タグ

例:タイルの設定

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

例:衝突タグの追加

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

グリッド座標

  • 行は垂直方向に増加
  • 列は水平方向に増加

範囲外のインデックスは安全に無視されます。


GridMap + GridBody

GridBodyはGridMapと連携して衝突、移動の解決、トリガー検出を行います。

GridBodyはGridMapエンティティの子でなければなりません。

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

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

最小サンプル:基本レベル

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

# 床を作成
for r in range(8):
    for c in range(8):
        level.map.set(row=r, column=c, tile=(0, 0))

# 壁を作成
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)

タグ

tagはタイルごとのオプションのメタデータです。

典型的な使用例:

  • 0 — 空
  • 1 — 壁
  • 2 — 水
  • 3 — ダメージゾーン

タグはゲームプレイや衝突システムで解釈されます。