我正在使用 A* 算法在六边形地图上找到最短路径。但在我实现 A* 算法之前,我使用了这个版本。(点击单位)
为了找到最短的地方,我已经在使用 A*,现在我想使用 A* 来标记单元可能去的字段。现在我使用这个函数:Here (line 58)。
我的问题是如何使用 A* 解决这个问题的最佳方法是什么?我必须找到到达每个字段的最短路径并获得路径长度,然后将长度与单元的运动进行比较吗?这个解决方案不好,而且速度很慢......
您对更好的解决方案有任何想法吗?
我正在使用 A* 算法在六边形地图上找到最短路径。但在我实现 A* 算法之前,我使用了这个版本。(点击单位)
为了找到最短的地方,我已经在使用 A*,现在我想使用 A* 来标记单元可能去的字段。现在我使用这个函数:Here (line 58)。
我的问题是如何使用 A* 解决这个问题的最佳方法是什么?我必须找到到达每个字段的最短路径并获得路径长度,然后将长度与单元的运动进行比较吗?这个解决方案不好,而且速度很慢......
您对更好的解决方案有任何想法吗?
对于类似战斗技术的游戏,我也有类似的问题。
我所做的是执行 A*,但仅当“打开”列表为空(已达到所有十六进制)或此列表中的最小值为无穷大(即十六进制无法访问)时,我才停止。这就像没有“目的地”十六进制。使用此解决方案,您只需传递每个十六进制一次(当它在打开的地图中的最小值时)。
然后你可以用计算的十六进制(封闭列表)做两件事
删除所有值(在您的情况下为长度)大于移动的十六进制。这只留下你的单位可以去的十六进制
保留这些十六进制,但根据长度显示不同颜色的十六进制。例如颜色取决于到达那里的圈数(这个圈数beeing(长度-1)%运动)。这对玩家很有用,因为他现在可以在地图上看到当前单位的任何(可到达)十六进制的最快路径
另一种可能是当最小值大于移动时停止搜索打开的列表(即你不能一回合去那里)。这将限制您在搜索中使用的十六进制数。
问候