【问题标题】:A* pathfinding work with big open list大开放列表的 A* 寻路工作
【发布时间】:2013-09-24 20:59:35
【问题描述】:

我从事一个需要使用 A* 算法的项目。在这个项目中,你用左键选择你的玩家,然后用右键在地图中引导他,就像千策略游戏的玩法一样。图形是 2D 的,有点像饥荒,游戏是用 SFML / C++ 开发的。

我需要使用 A* 来代替玩家,事实上,如果他的道路上出现障碍物,他必须避开它。但目前,我不知道如何在地图上应用网格,我想在任何地方放置任何树木/岩石和其他东西,以免看到网格单元。目前开放列表仅由像素组成,我认为这不是一个好的解决方案^^,算法很慢。如果您在保持快速算法的同时有任何逼真的渲染解决方案,我会很高兴听到它。 :)

提前谢谢你,

【问题讨论】:

标签: c++ sfml path-finding a-star


【解决方案1】:

你有截图吗?

寻路网格和渲染网格可以不同。 Zelda used different sized tiles for movement and rendering.

导航网格

这对于您的地图结构来说可能是多余的,但您可以使用导航网格。

,

编辑:如果你还没有读过,Amit 有一个很好的资源:@​​987654322@

【讨论】:

  • 我最初对塞尔达的评论有点困惑,因为过去的链接不执行任何寻路。
  • 我暂时不能截图:/,我有一个关于导航网格的问题,我想如何生成所有这些多边形?并在航点和导航网格之间建立联系?
【解决方案2】:

您正在寻找的是discretization。这个淫秽的名字背后有一个简单的原则:你不能处理无限量的数据。

然后您需要对您的世界进行转换:您可以将您的世界划分为某种网格(这就是导航网格和航路点正在做),并且只允许您的字符在这些单元格上(或点,您可以根据需要查看)。这是离散化:您将从连续值(实坐标)变为离散值(整数坐标/点)。你走得越精确,它看起来就会越好。

完成此操作后,在单元格/点之间分配移动成本相当简单,并且还对其执行 A*。

【讨论】:

  • 我不知道它应该如何工作。我把我的障碍物放在地图上,我需要用多边形连接它们,但是离散化网格的创建看起来很随机,你能为我澄清一下吗?
  • 如果您的障碍物位于网格的某些单元格上,您就知道这些单元格不能行走。它们是复杂的形状还是只是一些正方形/矩形?
  • 目前它们只是矩形,所以如果我看到你在告诉我的内容,我会将障碍物放在地图中,然后将地图离散化。但是我不知道如何通过地图的划分来考虑障碍物的位置和大小....
  • 简单(可能很笨,你必须自己看看)方式:你已经将矩形放置在点 p1(px;py)。离散化后,您知道包含该点的单元格是 c1,通过对点坐标进行整数除法(将它们除以一个单元格的宽度和高度),例如 c1(3;4)。您可以在矩形的 4 个点上重复此操作,以便 c1 和 c2 之间以及 c1 和 c3 之间的所有单元格都被矩形占据。如果不清楚,请告诉我,我会做一个简单的架构并在我找到一些时间(也许今晚)时编辑我的答案
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多