都2025年了,还有面试问A*寻路的???

336 阅读8分钟

点击上方亿元程序员+关注和★星标

引言

哈喽大家好,恢复更新之后,有一位读者跟我吐槽,面试某大厂游戏开发岗位,竟然被问到了A*寻路算法

他哭笑不得:“都2025年了,引擎商店里什么寻路方案没有,还问这种‘古董级’算法?”

我听了也哭笑不得,却又忍不住想:正因为是2025年,面试官还问A*,才恰恰说明这个问题的价值所在。

为什么?

基础不牢,地动山摇

现在的游戏引擎确实强大,点点鼠标就能实现复杂的寻路功能

但当你遇到NPC卡在角落、群组移动不自然、动态障碍物避让失效时,不了解底层原理,连调试都无从下手。

A*算法作为寻路领域的经典,其核心思想至今未过时

A*的精髓何在?

想象一下你在一个大型商场找餐厅:

  • 盲目搜索:每个店铺都进去看一眼(类似Dijkstra

  • 贪心搜索:只朝着餐厅方向走,可能被栏杆挡住(类似最佳优先搜索)

  • A*搜索:既考虑餐厅方向,又计算已走距离,找到最佳平衡

A*的聪明在于那个简单的评估函数:f(n) = g(n) + h(n) 当前代价+未来预估

(至于上面的,大家想象一下就行,谁饿肚子的时候会想怎么A*寻路?)

那么如何在游戏开发中运用和理解呢?

先来看个例子

不重复造轮,我们通过上一期文章的工程,讲一下如何在游戏开发中运用A*寻路。

1.打开工程

首先打开我们上一期文章的示例工程。

上一期我们讲到如何根据地图数据生成六边形网格地图,我们先给每个格子添加点击事件,方便演示寻路。

2.完善一下代码

定义存储格子节点的二维数组

在生成地图过程中,记录每个格子,并且监听点击事件,通过主角位置变化测试代码是否准确。

效果如下:

3.寻路核心

无论是在面试,还是在实际运用中,我们必须清晰地知道和说出A*寻路的几个核心含义:

  • G值:g(n)表示从初始节点到任意节点n的代价。当前节点的G值等于移动前节点的G值加上移动到当前节点的距离。如果新路径到相邻点的距离更短,G值更小,更新相邻节点的G值。

  • H值:h(n)表示从节点n到目标点的启发式评估代价。当前节点到终点的距离。固定不变的值。计算H值,忽略障碍(可以认为没有障碍),只计算最近的距离。

  • F值:F值为G值和H值之和。

  • OpenList: 存放着所有的待检测的节点(坐标),每次都会从其中寻找出符合某个条件的节点。

  • ClosedList: 存放着所有不会被检测的节点(坐标),每次检测都会忽略它们。

4.寻路过程:

这是通用的A*寻路过程,大家根据步骤替换成自己项目的代码即可。

  • 1.创建一个开放列表和一个关闭列表,用于存储待探索和已探索的节点。

  • 2.将起点添加到开放列表。

  • 3.重复以下步骤直到找到目标节点或开放列表为空:

a. 从开放列表中选择F值最小的节点(通常是H值+G值最小的节点)。

b. 将该节点从开放列表移至关闭列表。

c. 对该节点的邻居节点进行遍历,计算它们的G值和H值。

d. 如果邻居节点不在开放列表中,将其添加到开放列表,并更新其G值和父节点。

e. 如果邻居节点已在开放列表中,检查当前路径是否更短,如果更短则更新G值和父节点。

  • 4.当找到目标节点或开放列表为空时,搜索结束。

5.效果演示

调用寻路方法,传入起点和终点。

效果如下:

物是人非

2025年的A,早已不是你以为的A**

传统A*确实有局限:网格地图不灵活、动态环境适应性差。

但现在的A*已经进化

  • 多维化应用:不再局限于2D平面,用于三维空间导航、对话树选择、任务流程规划

  • 混合化实现:与行为树、状态机结合,打造更智能的NPC

  • 优化升级:分层路径寻找、双向搜索、动态权重调整,应对万人在线的复杂场景

面试官想看到的,不是你死记硬背的代码,而是你对算法思想的理解和应用能力

结语

下次面试再遇到A*,别翻白眼了,这是展示你深厚功力的绝佳机会。

因为工具会迭代,引擎会更新,但解决问题的思维能力永远不过时

所以,都2025年了,**问A*寻路怎么了?**该问!

本期示例工程可以通过阅读原文获取,感谢支持!

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。

实不相瞒,想要个爱心!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

知识付费专栏

你知道和不知道的微信小游戏常用API整理,赶紧收藏用起来~

100个Cocos实例

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

点击下方灰色按钮+关注。