2D寻路-查找平滑路径


10

我试图实现一个简单的寻路,但是结果不如我想要实现的令人满意。问题是像《星际争霸2》这样的游戏中的单位向所有方向移动,而在我的情况下,单位最多只能向8个方向(《魔兽争霸1》风格)移动,因为这8个方向直接指向下一个可用节点(它们从一个图块移动到下一个相邻图块) 。为了达到《星际争霸2》中的结果,我应该怎么做?缩小瓷砖尺寸?

http://i.stack.imgur.com/lr19c.jpg

在图片上,您可以看到水平方向的石头砖是障碍物,并且找到的路径标记为绿色砖。红线是我要实现的路径。


我还是跳点搜索的忠实粉丝,尽管我还没有时间实施它。但是该文档很有趣,并且具有良好的性能。

2
您确定这是您想要的路径吗?使用它的单位将部分穿过墙壁。在另一个示例中,我将其变得更加明显:i.imgur.com/eh4ZR.png这可能是您真正想要实现的目标:i.imgur.com/vFQg4.png
Markus von Broady

您说得对
Kooi Nam Ng

您必须在图块中具有分数坐标才能获得所需的内容。没有此功能,没有任何可能的途径-携带分数但不显示分数将使您的设备直线/对角/直线/对角移动。
罗伦·佩希特

@LorenPechtel您输入的是错误的,您可以在找到路径后使路径平滑。这很容易,因为您可以根据单元的尺寸创建两条线,并检查它们是否与tile0和tileN之间的图块相交,其中tile1-tile(N-1)是要从路径中删除的图块。
Markus von Broady,2012年

Answers:


8

对于一个好的寻路算法,使用A *可能是一个好主意,但是对于一个不需要复杂,高效或有效路径搜索的简单游戏,只需通过找出角色的方向就可以使角色朝目标移动。目标应该足够。

您可以做的是从顶点生成一个“可见性图”(每个点可以看到其他点),然后在该图上执行A *。这是可行的,因为最短的路径将始终位于可见性图上。

缩小磁贴大小可能会有所帮助。

资源资源

进一步阅读

编辑:我喜欢@MarkusvonBroady的评论。

“实际上是关于平滑路径,而不是找到路径。在图片上找到的路径看起来不错。”

资源资源

来自@MarkusvonBroady

我进行了搜索,找到以下内容(可能会对您有所帮助)


1
很棒的链接,从我
这里

2
@MarkusvonBroady,谢谢-1。我从你那里学到了。我不想指出问题,而是愿意学习并分享正确的观点。我相信通过讨论我们可以找到合适的解决方案。:)
Md Mahbubur Ra​​hman 2012年

@MarkusvonBroady,请您分享路径平滑算法的几个资源吗?
Mh Mahbubur Ra​​hman 2012年

实际上,我认为此答案确实有助于OP。我不认为OP要求实际进行平滑处理(样条插值等),而是他的算法当前正在找到一条可怕的非最佳路径,需要“平滑”为一条直线。自然会为他找到哪个A *,而无需进行任何其他平滑处理。
肖恩·米德迪奇

我一直在使用A *,我想我已经找到了最佳路径。
Kooi Nam Ng 2012年

0

从原始路径的一端开始,说path[0],你可以删除path[1],如果该段通过连接的点形成path[0]path[2]不相交的任何墙壁。更进一步直到最后一段将提供更简单的路径。

这不仅会平滑路径,而且还会删除一些无用的点,例如火焰示例,直线的3个连续段。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.