Skip to content

Pathfind

本文档由 src/stdlib/pathfind.mcrs 自动生成,请勿手动编辑。

API 列表


pf_pack v1.0.0

将 (x, z) 网格坐标编码为单个打包整数

redscript
fn pf_pack(x: int, z: int): int

参数

参数说明
x网格 X 坐标 [0, 15]
z网格 Z 坐标 [0, 15]

返回: x * 16 + z(范围 [0, 255] 内的唯一索引)

示例

redscript
let p: int = pf_pack(3, 7)  // result: 55

pf_unpack_x v1.0.0

从打包网格索引中提取 X 坐标

redscript
fn pf_unpack_x(packed: int): int

参数

参数说明
packed来自 pf_pack 的打包坐标

返回: X 分量:packed / 16

示例

redscript
let x: int = pf_unpack_x(55)  // result: 3

pf_unpack_z v1.0.0

从打包网格索引中提取 Z 坐标

redscript
fn pf_unpack_z(packed: int): int

参数

参数说明
packed来自 pf_pack 的打包坐标

返回: Z 分量:packed % 16

示例

redscript
let z: int = pf_unpack_z(55)  // result: 7

pf_new_map v1.0.0

分配一个新的 16×16 网格障碍物地图,所有格子初始可通行

redscript
fn pf_new_map(): int[]

返回: 包含 256 个零的 int[];0=可通行,1=阻塞

示例

redscript
let map: int[] = pf_new_map()

pf_set_blocked v1.0.0

将网格格子标记为不可通行(阻塞)

redscript
fn pf_set_blocked(map: int[], x: int, z: int)

参数

参数说明
map来自 pf_new_map 的障碍物地图
x格子 X 坐标 [0, 15]
z格子 Z 坐标 [0, 15]

返回: void — 设置 map[pf_pack(x,z)] = 1

示例

redscript
pf_set_blocked(map, 5, 3)  // block cell (5, 3)

pf_set_open v1.0.0

将网格格子标记为可通行(开放)

redscript
fn pf_set_open(map: int[], x: int, z: int)

参数

参数说明
map来自 pf_new_map 的障碍物地图
x格子 X 坐标 [0, 15]
z格子 Z 坐标 [0, 15]

返回: void — 设置 map[pf_pack(x,z)] = 0

示例

redscript
pf_set_open(map, 5, 3)  // re-open previously blocked cell (5, 3)

pf_is_blocked v1.0.0

检查网格格子是否被阻塞或超出边界

redscript
fn pf_is_blocked(map: int[], x: int, z: int): int

参数

参数说明
map来自 pf_new_map 的障碍物地图
x格子 X 坐标
z格子 Z 坐标

返回: 超出边界或不可通行返回 1,可通行返回 0

示例

redscript
let blocked: int = pf_is_blocked(map, 5, 3)

pf_heuristic v1.0.0

计算两个网格格子之间的曼哈顿距离(×10000 精度)

redscript
fn pf_heuristic(x1: int, z1: int, x2: int, z2: int): int

参数

参数说明
x1第一个格子 X
z1第一个格子 Z
x2第二个格子 X
z2第二个格子 Z

返回: (|x1-x2| + |z1-z2|) × 10000,可用作 A* 启发函数

示例

redscript
let h: int = pf_heuristic(0, 0, 3, 4)  // result: 70000 (7 Manhattan steps × 10000)

pathfind_bfs v1.0.0

使用 BFS 在 16×16 网格上寻找两格子之间的最短路径

redscript
fn pathfind_bfs(map: int[], sx: int, sz: int, gx: int, gz: int): int[]

参数

参数说明
map来自 pf_new_map 的障碍物地图(已设置阻塞)
sx起始格子 X [0, 15]
sz起始格子 Z [0, 15]
gx目标格子 X [0, 15]
gz目标格子 Z [0, 15]

返回: 从起点到终点(含)的打包坐标 int[],无路径时返回空数组

示例

redscript
let map: int[] = pf_new_map()
pf_set_blocked(map, 3, 5)
let path: int[] = pathfind_bfs(map, 0, 0, 7, 7)
let x0: int = pf_unpack_x(path[0])

pf_noop v1.0.0

Default no-op onDone callback for pathfind_bfs_coro. Replace with your own handler.

redscript
fn pf_noop()

Released under the MIT License.