pyxen.GridMap
GridMap 是由行和列排列的单元格组成的空间容器。
它定义了图块布局、单元格大小、可选的图块图集,以及 GridBody 的碰撞空间。
有关碰撞概念,请参见碰撞。
构造函数
GridMap(
*,
rows=None,
columns=None,
size=None,
image=None
)
所有参数均为仅关键字参数。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
rows | int | 网格行数 |
columns | int | 网格列数 |
size | (width, height) | 单元格大小(像素) |
image | str | 图块图集图像名称 |
示例
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
| 属性 | 类型 | 默认值 |
|---|---|---|
active | bool | True |
控制是否对此地图运行碰撞模拟。当为 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
)
参数
| 参数 | 类型 | 描述 |
|---|---|---|
row | int | 网格行索引 |
column | int | 网格列索引 |
tile | (x, y) | 图集中的图块坐标 |
tag | int | 可选碰撞标签 |
示例:设置图块
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— 伤害区域
标签由你的游戏逻辑或碰撞系统解释。