使用此函数,您可以创建一个路径,该路径将使用先前定义的 mp_grid 从起点导航到终点,从而避免已添加到网格中的任何障碍。xstart 和 ystart 参数指示房间坐标中路径的起点,而 xgoal 和 ygoal 参数指示目标。也可以只选择水平 / 垂直移动,或者通过在 allowdiag 参数中指定 true 来允许完全对角线移动。函数返回 true(成功查找路径) 或 false(失败) 以及设置所选路径。在下图中,您可以看到这一切是如何协同工作的:
如您所见,"管道 " 对象已添加到网格中,这意味着创建的任何路径都必须绕过它们。在图像中创建了两条路径,一条 (绿色) 为允许对角线,另一条 (红色) 为不允许对角线。两者之间的区别非常明显,绿色道路显得更加 " 优雅 " 和直接,但这完全取决于你将他们放在你更喜欢的地方有什么用。请注意,路径与当前实例无关-它是通过网格的路径,而不是特定实例的路径,即使特定实例可能具有存储路径索引的变量。您可能还需要调试这些路径以查看它们是如何在游戏环境中创建和交互的,在这种情况下,您应该使用 draw_path() 函数。
注意 : 路径必须是以前创建的 (使用 path_add() 的代码或作为资源),并且将由此函数生成的路径替换。
mp_grid_path(id, path, xstart, ystart, xgoal, ygoal, allowdiag);
参数 | 类型 | 描述 |
---|---|---|
id | MP Grid ID | 要使用的 mp_grid 的索引 |
path | Path Asset | 函数要使用的路径的索引 |
xstart | Real | 新路径的起始 X 坐标 |
ystart | Real | 新路径的起始 Y 坐标 |
xgoal | Real | 完成新路径的 X 坐标 |
ygoal | Real | 完成新路径的 Y 坐标 |
allowdiag | Boolean | 指示是否允许对角线移动,而不仅仅是水平或垂直移动 |
global.grid = mp_grid_create(0, 0, room_width div 32, room_height div 32, 32, 32);
mp_grid_add_instances(global.grid, obj_wall, false);
with (obj_Enemy)
{
path = path_add();
if (mp_grid_path(global.grid, path, x, y, obj_Player.x, obj_Player.y, 1))
{
path_start(path, 0, 3, 0);
}
}
上述代码创建一个全局变量 global.grid,然后生成一个 mp_grid 并将其 index(id) 分配给该变量,以便在所有进一步的 mp_grid 函数调用中使用。然后将 "obj_Wall" 的所有实例添加到网格中,然后获取 "obj_Enemy" 的所有实例以创建路径,然后使用 mp_grid_path 计算从其位置到 "obj_Player" 位置的路由。如果存在路由,则对象将沿路径启动自身。