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 的移动、碰撞或回调。

# Pause collisions (e.g. pause menu)
level.map.active = False

# Resume collisions
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  # wall
)

网格坐标

  • 行垂直增加
  • 列水平增加

超出范围的索引会被安全忽略。


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"
    )
)

# Create floor
for r in range(8):
    for c in range(8):
        level.map.set(row=r, column=c, tile=(0, 0))

# Create walls
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 — 伤害区域

标签由你的游戏逻辑或碰撞系统解释。