引言
本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。
很多小伙伴一听到A星算法,第一反应就是它就是个寻路的算法,我会。的确是,掌握了算法的人,自然觉得容易。但是对于游戏开发新人或者刚接触A星算法的人,这个算法还是很难很复杂的。而且让掌握的人在游戏项目中运用,也不一定能第一时间敲出来。下面跟随笔者一起来看看。
本文源码和源工程在文末获取,小伙伴们自行前往。
什么是A星算法?
A星算法(A-star algorithm)是一种广泛应用的路径规划算法,它被设计用来在图形或网络中寻找两个节点之间的最短路径。
A星算法的原理
A星算法是一种启发式搜索算法,结合了广度优先搜索和最佳优先搜索的特点。其核心思想是通过评估每个可能的路径,以找到从起点到目标节点的最佳路径。在A星算法中,每个节点都有两个关键值:
- G值(代价):表示从起点到当前节点的实际代价,即已经走过的路径长度。
- H值(启发式值):表示从当前节点到目标节点的估计代价,即预计还需要走多远才能达到目标。
A星算法的步骤
简单列举一下A星算法的步骤,大家写代码时可以根据算法的步骤直接"翻译"过来就行:
- 创建一个开放列表和一个关闭列表,用于存储待探索和已探索的节点。
- 将起点添加到开放列表,并将其G值设为0。
- 重复以下步骤直到找到目标节点或开放列表为空: a. 从开放列表中选择F值最小的节点(通常是H值+G值最小的节点)。 b. 将该节点从开放列表移至关闭列表。 c. 对该节点的邻居节点进行遍历,计算它们的G值和H值。 d. 如果邻居节点不在开放列表中,将其添加到开放列表,并更新其G值和父节点。 e. 如果邻居节点已在开放列表中,检查当前路径是否更短,如果更短则更新G值和父节点。
- 当找到目标节点或开放列表为空时,搜索结束。
A星算法的优势
- 完备性:如果存在可行解,A*算法能够找到最佳路径。
- 启发式搜索:通过使用启发式估计值,A*算法可以在大型图形中高效搜索,减少搜索空间。
- 适应性:A*算法可以根据不同问题的需求和启发式函数进行定制。
- 广泛应用:A*算法在多个领域都有成功的应用记录,因此被广泛使用。
A星算法实践
1.打开上一篇文章的工程
如下图,笔者已经编辑好整个地图的阻挡信息(红色部分),蓝色原点是起点位置。绿色的是终点位置。白色的是路径点。
2.根据地图信息抽象化数据
创建网格,并且根据地图信息标记阻挡格子不可行走。
3.创建AStar类
创建一个开放列表和一个关闭列表,用于存储待探索和已探索的节点。并且将起点加入Open集设置G值为0。
4.检索路径
重复以下步骤直到找到目标节点或开放列表为空: a. 从开放列表中选择F值最小的节点(通常是H值+G值最小的节点)。 b. 将该节点从开放列表移至关闭列表。 c. 对该节点的邻居节点进行遍历,计算它们的G值和H值。 d. 如果邻居节点不在开放列表中,将其添加到开放列表,并更新其G值和父节点。 e. 如果邻居节点已在开放列表中,检查当前路径是否更短,如果更短则更新G值和父节点。直到到达终点检索结束。
5.构建路径
通过链表反向形成路径。
6.编写测试代码
依旧通过cc.Graphics
去绘制起点、终点、路径和阻挡。
每次点击地图之后重新生成路径并且重新绘制。
7.结果演示
总结
A星算法是一种强大的路径规划算法,通过综合考虑实际代价和启发式估计,能够在游戏寻路中中寻找最佳路径。它的原理简单但功能强大,为解决许多游戏中的导航和规划问题提供了有力的工具。
本文的重点内容主要有以下几点,不知道小伙伴们是否已经理解:
- 本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。
- A星算法的概念、原理、步骤和优势以及实践。
- 源码通过关注“亿元程序员”发送"Astar"获取。
AD:笔者已经上线的小游戏《填色之旅》《贪吃蛇掌机经典》《重力迷宫球》大家可以自行点击搜索体验。
感兴趣的小伙伴记得关注"亿元程序员"哦,一位有着8年游戏行业经验的主程。学习游戏开发不迷路。感谢您的关注,希望能给到您帮助, 也希望通过您能帮助到大家。
喜欢的可以点个赞、点个在看哦!请把该文章分享给你觉得有需要的其他小伙伴。谢谢。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。