方形或六角形网格更适合寻路吗?


17

在通过路径查找算法搜索的区域使用正方形或六边形网格之间是否有任何显着差异。换句话说,最好是正方形或六角形,如果是,为什么呢。


4
我认为您应该使用适合自己游戏方式的任何东西;)
安德鲁·罗素

Answers:


19

决定是否使用正方形网格和十六进制网格的主要考虑因素不应是AI的易于实现-宽度优先和深度优先的搜索算法几乎相同,无论您使用哪种图形。

而是,这是游戏设计师应考虑的游戏性问题。大众市场更容易使用正方形网格(十六进制板看起来“怪异”),并且在上下左右控件的世界中,从UI的角度来看,在正方形周围导航比使用十六进制要直观得多。方格也倾向于更多地限制运动。假设是正交运动(而不是对角线运动),则围绕一个正方形障碍物需要花费4步才能走,而在十六进制网格中需要3步。从编程的角度来看,十六进制也更容易实现,但它与搜索算法的意义不一样,方形网格等于二维数组,但是十六进制网格并没有真正映射到标准数据结构。

方形网格的缺点是机芯永远不会感觉正确。对角移动应该占用sqrt(2)运动点,但实际上它是1运动(这使它感觉像在对角线上行走很快,几乎没有理由进行正交行走)或2运动(这使对角运动感觉太慢了) )。使用十六进制网格,移动距离要直观得多,因为无论采用哪种路径,从一个十六进制到另一十六进制的距离始终相同。


4
+1。这是设计决定,而不是AI决定。如果您确实想要六边形网格,那么像www-cs-students.stanford.edu/~amitp/game-programming/grids/…这样的偏心方形网格可能对休闲玩家而言不那么吓人,并且在数学上等效于六边形。同样,它也是一种方便的内存表示形式。

2
对于句子“为大众市场更容易使用
方格

埃德温没有问什么是基于网格的游戏更好。他在问,使用AI最好使用正方形或六边形。世界和游戏本身本身并不仅限于AI搜索的节点。
AttackingHobo 2010年

我已经实现了具有六角形和方形网格的基于回合制的策略游戏,就寻路复杂性而言,绝对没有必要的区别。我什至将一个游戏从十六进制地图切换为正方形地图,(除了渲染),我唯一要做的更改是对MapLocation :: GetDistance()方法进行了计算,该方法计算了两个扇区之间的距离。我只需要调整计算以处理其他每行稍微偏移的情况。在这两种情况下,您都可以使用相同的内存表示形式。因此,正如其他人所说,这确实是一个设计问题。
Mike Strobel 2010年

4
顺便说一句,十六进制可以映射到二维数组。想象一个正方形网格,然后将每偶数列向下移动半步。您现在有了一个偏移正方形网格,它与十六进制网格同构。
Asmor

3

无论如何我都不是AI专家,但是差异应该可以忽略不计。正方形网格要快一些(每个节点4个连接,而不是6个连接),但这实际上并不是算法运行时的限制因素。根据您计划使用的算法,对于十六进制网格,代码可能会更复杂,因为计算坐标会更加复杂,并且使用我认为会比较困难的四叉树/八叉树快捷方式常用于寻路。

但是对于像回合制策略游戏关卡这样的简单世界来说,两种布局之间的差异不应该太大。正方形网格会更简单,更快。


5
“方形网格是快一点(每节点的代替6 4个连接)” -除非你可以沿着对角线移动,在这种情况下它的8个连接VS 6.
伊恩施雷伯

感动。你完全正确;当然,对角线连接是可能的。
格雷戈里·艾弗里·威尔2010年

3

关于路径规划,我可以考虑一个实际的差异。从十六进制单元的中心到相邻单元的遍历始终是相同的距离,但是,如果允许对角线行进,则对于正方形而言,这是不正确的。


0

这个关于六角形的指南很棒。关于寻路的部分有一个交互式示例,以及有关如何自适应正方形寻路的一些信息。

如果您使用的是基于图的寻路,例如A *或Dijkstra的算法或Floyd-Warshall,则在十六进制网格上的寻路与在正方形网格上的寻路没有什么不同。

  • 邻居。我在寻路教程中提供的示例代码调用graph.neighbors来获取位置的邻居。为此,请使用邻居部分中的函数。过滤掉无法通过的邻居。
  • 启发式。A *的示例代码使用启发式函数,该函数给出两个位置之间的距离。使用距离公式,按比例缩放以匹配移动成本。例如,如果您的移动成本是每十六进制5,则将距离乘以5。
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.