【问题标题】:Pathfinding based around Rectangles基于矩形的寻路
【发布时间】:2015-05-02 18:33:00
【问题描述】:

我有一个 XNA 僵尸生存游戏,玩家必须在建筑物中坚持下去,然后僵尸会一波又一波地向他们袭来。僵尸最初会瞄准路障以接近玩家,然后在破坏路障后瞄准玩家。

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

更新:到目前为止,我在对寻路的理解方面取得了很大进步,但仍然没有骰子。上图是我当前的网格/节点系统。

如您所见,在“竞技场”之外,航点很少。僵尸需要到达道路上最近的航路点,然后他们才能前往障碍物(我知道,最上面的道路仍然需要障碍物)。

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

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

XNA 是一个垂死的框架,没有关于寻路的可用文章/教程,所以我真的需要一些帮助。

【问题讨论】:

标签: c# xna path-finding


【解决方案1】:

使用 a* 风格的寻路算法,基于网格的游戏关卡是理想的,因为数据数组为 a* 算法提供了确定最佳路径所需的信息。

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

您甚至可以根据您的等级以编程方式生成这些航点节点。我统一编写了一个实现,描述为here

除此之外,您还可以查看Navigation Meshes。该技术涉及在您的关卡中计算或预定义允许移动的多边形。这涉及更多,但会产生更好的结果。

【讨论】:

  • @Frayt 作者在设置节点树下进行了描述。请参阅我在上一篇关于沙袋的帖子中讨论过的
  • 我已经用我的进度更新了这个问题,如果你们都可以看一下那就太好了。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 2022-01-24
  • 2021-09-15
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多