在我用C#XNA编程的小型自上而下,可怕的外星人游戏中,我有一些外星人和一些墙壁(除此之外)。我无法搞清楚的是我如何能够将外星人引向围墙。此刻,他们像白痴一样碰到他们,沿着他们滑动,如果他们捅出另一边,就可以到达他们的目标。
以下是我对此问题的专业说明: problem http://imageshack.com/a/img829/6545/wsf4.jpg
直接说,我的问题是:
算法/解释欢迎,c#奖金! :)
有些假设可以使计算更容易: - 外星人和墙壁有AABB - 墙壁总是垂直或水平
如果有必要,我很乐意提供任何其他信息:)
答案 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是基于节点的。如果放置节点不是一个选项,我相信转向力是你最好的选择。