A *寻路工作与大开放列表

时间:2013-09-24 20:59:36

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

我在一个需要使用A *算法的项目上工作。在这个项目中,您可以通过左键单击选择您的玩家,然后通过右键单击引导他进入地图,就像千战略游戏的游戏玩法一样。图形是2D,有点像游戏Do not Starve,游戏是用SFML / C ++开发的。

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

提前谢谢你,

2 个答案:

答案 0 :(得分:2)

你有截图吗?

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

导航网格

这对于您的地图结构可能有点过分,但您可以使用导航网格。

enter image description hereenter image description here

编辑:如果您还没有阅读,Amit有一个很好的资源:http://theory.stanford.edu/~amitp/GameProgramming/

答案 1 :(得分:0)

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

然后你需要对你的世界进行转换:你可以将你的世界划分为某种网格(这就是你的世界),而不是让你的角色/单位去任何地方(x和y是实数)。导航网格和航点正在做,并且只允许你的char进入这些单元格(或点,你可以根据需要看到它)。这是离散的:你是从连续值(实际坐标)到离散值(整数坐标/点)。你越精确,看起来越精细。

执行此操作后,在单元格/点之间分配移动成本非常简单,并在其上执行A *。