2014-04-03 38 views
0

在我用C#XNA编程的小型自上而下的可怕驴子外国人游戏中,我有一些外星人和一些围墙(等等)。我无法弄清楚的一件事是我怎样才能引导外星人的围墙。目前,他们像白痴一样陷入他们的身边,一边滑动一边,如果他们把另一边戳出来,可能会达到他们的目标。XNA - 围绕墙壁转向

这里是我的问题的专业说明: problem http://imageshack.com/a/img829/6545/wsf4.jpg

那么直接,我的问题是:

  1. 我如何检查是否有外星人和目标之间的墙?
  2. 我如何引导他们沿着最短的路线?

算法/解释welcome,c#奖励! :)

一些相同的假设,希望能够便于计算: - 外星人,墙壁AABB - 墙壁总是垂直或水平

,我hapy如果必要的话:)

提供任何其他信息
+0

搜索“A * pathfinding unity”。当我在Google上输入时,第一个结果似乎很有希望。 –

+0

@ChrisDunaway我的游戏是连续的,而不是基于网格。这种解决方案意味着我不得不为了这个算法而在我的世界上建立一个网格?如果是这样,我可以简单地使用vector2的坐标作为细网格吗?如果不是,网格应该有多宽? – IamPancakeMan

+0

您可以在想要转向的地方定义自己的航点(许多大型游戏使用区域而不是点数)。使用A *算法,您将连接点/区域为您的播放器创建路径。您可以通过检查您是否实际上与原始直线路径中的墙壁发生碰撞来分割A *路径查找和常规移动之间的功能(我没有这样做,但我建议使用“光线跟踪”)。因此,如果您检测到从玩家位置到目标位置的碰撞,请使用A *查找最佳路径,否则您只需朝该位置行走。 –

回答

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的是基于,如果你想手动放置节点的更多节点。如果放置节点不是一种选择,我相信转向力量是你最好的选择。

+0

哈!我记得在决策数学中dij-cantpronounceit-ra的algorythm。那些简单的日子...... 所以这听起来像是我需要遍布整个地方的节点用于我使用的任何算法。我可以想象dij-cantpronounceit-ra的algorythm会是什么样子,所以我可能会这样做。谢谢 :) – IamPancakeMan