Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ A*大开放列表的寻路工作_C++_Sfml_Path Finding_A Star - Fatal编程技术网

C++ A*大开放列表的寻路工作

C++ A*大开放列表的寻路工作,c++,sfml,path-finding,a-star,C++,Sfml,Path Finding,A Star,我在一个需要使用*算法的项目上工作。在这个项目中,你用鼠标左键选择你的玩家,然后用鼠标右键在地图上引导他,就像千人战略游戏一样。图形是2D,有点像游戏不饿,游戏是用SFML/C++开发的。 我需要使用*来替换球员,事实上,如果在他的道路上出现障碍,他必须避免。但目前,我不知道如何在地图上应用网格,我想在任何地方放置任何树/岩石和其他东西,以免看到网格单元。目前,开放列表仅由像素组成,这不是一个好的解决方案,我认为^^^,算法相当慢。如果您有任何在保持快速算法的同时实现真实感渲染的解决方案,我很乐

我在一个需要使用*算法的项目上工作。在这个项目中,你用鼠标左键选择你的玩家,然后用鼠标右键在地图上引导他,就像千人战略游戏一样。图形是2D,有点像游戏不饿,游戏是用SFML/C++开发的。 我需要使用*来替换球员,事实上,如果在他的道路上出现障碍,他必须避免。但目前,我不知道如何在地图上应用网格,我想在任何地方放置任何树/岩石和其他东西,以免看到网格单元。目前,开放列表仅由像素组成,这不是一个好的解决方案,我认为^^^,算法相当慢。如果您有任何在保持快速算法的同时实现真实感渲染的解决方案,我很乐意听到。:)


提前谢谢你,你有截图吗

路径查找网格和渲染网格可以不同

导航网格 对于地图结构来说,这可能有些过分,但您可以使用导航网格

,


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

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

然后,您需要在您的世界上执行转换:您可以将您的世界划分为某种网格(这是导航网格和航路点正在做的),而不允许您的角色/单位移动到任何位置(x和y是实数),并且只允许您的角色移动到这些单元格(或点,您可以根据需要查看). 这是离散化:从连续值(实坐标)到离散值(整数坐标/点)。你做得越精确,它看起来就越好


这样做之后,在单元/点之间分配移动成本就相当简单了,而且还可以对其执行*操作。

我最初对塞尔达的评论有点困惑,因为指向过去的链接不会执行任何寻路操作。我暂时无法制作屏幕截图:/,我对导航网格有一个问题,我想如何生成所有这些多边形?并在航路点和导航网格之间建立链接?有关更多详细信息,请参阅。我不知道它应该如何工作。我把我的障碍物放在地图上,我需要用多边形连接它们,但是用离散化创建的网格看起来非常随机,你能为我澄清一下吗?如果你的障碍物被放置在网格的某些单元上,你知道这些单元是不可行走的。它们是复杂的形状还是一些正方形/矩形?它们目前只是矩形,所以如果我看到你告诉我的,我会在地图上放置障碍物,然后用离散化方法划分地图。然而,我不知道如何通过划分地图来考虑障碍物的位置和大小……简单的方法(可能是愚蠢的,你必须自己去看)就是:你把你的矩形放在点p1(px;py)上。离散化后,通过对点坐标进行整数除法(除以一个单元的宽度和高度),可以知道包含该点的单元是c1,例如c1(3;4)。可以在矩形的4个点上重复此操作,以便c1和c2之间以及c1和c3之间的所有单元格都被矩形占据。如果不清楚,请告诉我,我会做一个简单的模式,并在我有时间的时候编辑我的答案(也许今晚)