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

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

引言

哈喽大家好 ,恢复更新之后,有一位读者跟我吐槽 ,面试某大厂游戏 开发岗位,竟然被问到了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年游戏主程一起学习设计模式

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

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

相关推荐
Moment3 小时前
Node.js v25.0.0 发布——性能、Web 标准与安全性全面升级 🚀🚀🚀
前端·javascript·后端
杨超越luckly3 小时前
HTML应用指南:利用POST请求获取中国一汽红旗门店位置信息
前端·arcgis·html·数据可视化·门店数据
专注前端30年3 小时前
【JavaScript】every 方法的详解与实战
开发语言·前端·javascript
速易达网络3 小时前
Java Web登录系统实现(不使用开发工具)
java·开发语言·前端
IT_陈寒3 小时前
Vite 3.0 性能优化实战:5个技巧让你的构建速度提升200% 🚀
前端·人工智能·后端
金士顿3 小时前
EC-Engineer SDK 核心 API 使用指南
前端
景彡先生3 小时前
Python基础语法规范详解:缩进、注释与代码可读性
开发语言·前端·python
蓝创精英团队4 小时前
C++DirectX9坐标系与基本图元之渲染状态(RenderState)_0304
前端·c++·性能优化