XNA - 围绕墙壁转向

时间:2014-04-03 14:31:28

标签: c# xna artificial-intelligence rectangles collision

在我用C#XNA编程的小型自上而下,可怕的外星人游戏中,我有一些外星人和一些墙壁(除此之外)。我无法搞清楚的是我如何能够将外星人引向围墙。此刻,他们像白痴一样碰到他们,沿着他们滑动,如果他们捅出另一边,就可以到达他们的目标。

以下是我对此问题的专业说明: problem http://imageshack.com/a/img829/6545/wsf4.jpg

直接说,我的问题是:

  1. 如何检查外星人与目标之间是否有隔离墙?
  2. 我如何沿着最短的路线引导它们?
  3. 算法/解释欢迎,c#奖金! :)

    有些假设可以使计算更容易:   - 外星人和墙壁有AABB   - 墙壁总是垂直或水平

    如果有必要,我很乐意提供任何其他信息:)

1 个答案:

答案 0 :(得分:1)

当我为我开发的wp7 / wp8游戏进行研究时,我用A *寻路解决了这个问题。 (www.policyalmanac.org/games/aStarTutorial.htm)。

您也可以使用Dijkstra算法进行寻路。 http://i.stack.imgur.com/VMkdl.gif

这是我的第一个方法。我已经学会了一种不同的方法来接近它。这建立在A *寻路上,并利用AI Steering力/行为。你甚至可以通过转向力来解决这个问题。

简单地说,操纵力迫使实体根据其目标和环境进行移动。您将移动(速度)力堆叠到实体上,并且这些力的总和以期望的方式移动实体。

因此,一个实体可能会想要移动到你的怪物,避开墙壁,并避开地图的边界。这些速度乘以%值(你希望它们应用于全局力量的多少)全部加在一起为你提供了最终的力量。

所有这些都有问题和限制。我认为A *和转向力的组合对你来说可能是最好的。

示例:http://i.stack.imgur.com/u7ECs.jpg'

编辑:如果你想手动放置节点,Dijkstra是基于节点的。如果放置节点不是一个选项,我相信转向力是你最好的选择。