C# 基于矩形的路径查找

C# 基于矩形的路径查找,c#,xna,path-finding,C#,Xna,Path Finding,我有一个XNA僵尸生存游戏,玩家必须站在一座建筑物里,僵尸会以波浪的形式向他们袭来。僵尸最初以路障为目标接近玩家,然后一旦他们打破路障,就以玩家为目标 这是迄今为止游戏的一张图片。墙壁(不可摧毁)为黑色/灰色,路障为棕色: 更新:到目前为止,我对寻路的理解已经取得了很大的进步,但仍然没有成功。上图显示了我当前的网格/节点系统 正如你所看到的,在“竞技场”之外,只有很少的航路点。僵尸需要到达道路上最近的航路点,这样他们就可以朝着障碍物前进(我知道,最上面的道路仍然需要障碍物) 一旦他们打破了障碍

我有一个XNA僵尸生存游戏,玩家必须站在一座建筑物里,僵尸会以波浪的形式向他们袭来。僵尸最初以路障为目标接近玩家,然后一旦他们打破路障,就以玩家为目标

这是迄今为止游戏的一张图片。墙壁(不可摧毁)为黑色/灰色,路障为棕色:

更新:到目前为止,我对寻路的理解已经取得了很大的进步,但仍然没有成功。上图显示了我当前的网格/节点系统

正如你所看到的,在“竞技场”之外,只有很少的航路点。僵尸需要到达道路上最近的航路点,这样他们就可以朝着障碍物前进(我知道,最上面的道路仍然需要障碍物)

一旦他们打破了障碍,他们需要使用寻路来发现并跟随玩家绕过墙壁和障碍物,因此有更多的航路点

我目前正在将每个网格点存储在
Microsoft.XNA.Framework.Point
数组中。我已经尽了很大的努力来实现这一点,我已经参考了很多,但是我的系统和他的完全不同,我找不到一种方法让它工作。例如,本文的系统在每个方向上查找一个网格单元以查找节点邻居。由于竞技场外的航路点附近没有节点邻居,因此系统失败


XNA是一个正在消亡的框架,没有关于寻路的可用文章/教程,所以我在这里真的需要一些帮助。

对于a*风格的寻路算法,基于网格的游戏级别是理想的,因为数据数组为a*算法提供了确定最佳路径所需的内容

当你远离基于网格的游戏时,你需要变得更聪明一点。最好的选择是创建一个基于*pathfinder的节点。此实现要求您在您的级别中定义“节点”,作为路径中的航路点。您的算法在修改的a*实现中利用预定义的节点来确定最佳路径

您甚至可以根据您的级别以编程方式生成这些航路点节点。我用unity编写了一个实现


除此之外,您还可以查看。此技术涉及计算或预先定义标高中允许移动的多边形。这需要更多的参与,但会产生更好的结果

A*可能还是要走的路。最简单的方法是在特定位置(例如,门中间、墙角)添加您自己的航路点,而不是尝试处理每个像素。可能重复“但这是基于网格系统的,我的游戏是基于矩形的”-不正确。如果你想要“简单”,你可以尝试,但是你可能会发现转向行为只对眼前的障碍有用,而不是复杂的长期目标,比如绕墙移动;进门;穿过两个房间;在这个过程中找到一扇门。忘了楼梯吧。A*会做所有这些事情。转向确实有路径跟踪,但是你需要制定一个动态路径sadly@Frayt作者在“设置节点树”下进行了描述。参考“我在上一篇关于沙袋的帖子中讨论过的”,我已经用我的进度更新了这个问题,如果你们都能看一下,那将是非常好的。