在众多寻路算法中,A* 的确是比较不错的。但在游戏寻路领域,A* 耗时过大,显然需要改进。

改进

我的想法是预先将地图按照一定的规则划分为多个区域,这些区域彼此连通,并且计算好彼此连通的区域之间的来往的消耗(预计算部分,经检测耗时极少)。

从几千个正方形组成的障碍矩阵中构造出一张数据量大大减少的带权连通图。

每次寻路时自动检测起始位置和终点分别在图中的哪两个节点,在很短时间内构造出一条最短路径。

接着,计算进入以及离开每个区域的比较适合的点,再经过路径平滑算法,得到的路径与传统 A* 没有明显区别,但是中间节点减少,耗时大大减少。经过计算,耗时为传统 A* 的 1/800 - 1/1000,取得相当显著的效果。而且对于 A* 其他的改进措施,也可以用在该改进方法上,如双向 A*,在较复杂的图中可以明显加快寻路速度。并且该寻路代码也可以放在非主线程中,影响更是可以忽略不计。

(改进 A* 路径)

(传统 A* 路径)

在障碍图中的信息发生改变时,可以重新进行计算,得出新的带权连通图,并且广播所有已经寻路完成但是还没有达到终点的物体,使其修改路径,耗时同样在可接受范围内。

总结

该 A* 改进算法是典型的以空间换时间的算法(虽然耗费的空间也很少,在游戏领域可以忽略)

接下去我会继续研究比如策略游戏中一个群体单位寻路算法的改进,因为他们无论起始点是否在同个区域,在带权连通图中总会经过相同的节点,这些计算完全可以缓存下来,减轻后面计算的负载。

a算法和a*算法的区别_游戏寻路中 A* 算法的改进相关推荐

  1. 斗牛怎么玩法算法_游戏开发中的算法

    游戏技术这条路,可深可浅.你可以满足于完成GamePlay玩法层面的东西,你也可以满足于架构和框架设计层面的东西,你也可以醉心于了解某一游戏引擎带来的掌控感.但是,我们不该止步于此,止步与目前所见或所 ...

  2. 游戏寻路中 A* 算法的改进

    在众多寻路算法中,A* 的确是比较不错的.但在游戏寻路领域,A* 耗时过大,显然需要改进. 改进 我的想法是预先将地图按照一定的规则划分为多个区域,这些区域彼此连通,并且计算好彼此连通的区域之间的来往 ...

  3. Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(

    2019独角兽企业重金招聘Python工程师标准>>> 在Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(百搜技术) 在Java ME游戏开发中,经常需要进行碰撞检测 ...

  4. 手把手教你架构3d游戏引擎pdf_游戏开发中的算法

    游戏技术这条路,可深可浅.你可以满足于完成GamePlay玩法层面的东西,你也可以满足于架构和框架设计层面的东西,你也可以醉心于了解某一游戏引擎带来的掌控感.但是,我们不该止步于此,止步与目前所见或所 ...

  5. a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...

       若步智能                  移动这一简单动作,对于人类来说相当容易,但对机器人而言就变得极为复杂,说到机器人移动就不得不提到路径规划,路径规划是移动机器人导航最基本的环节,指的是 ...

  6. em算法 实例 正态分布_【机器学习】EM算法详细推导和讲解

    今天不太想学习,炒个冷饭,讲讲机器学习十大算法里有名的EM算法,文章里面有些个人理解,如有错漏,还请读者不吝赐教. 众所周知,极大似然估计是一种应用很广泛的参数估计方法.例如我手头有一些东北人的身高的 ...

  7. 大数据算法课程笔记1:寻找中值算法之随机选取,中值的中值,One Pass算法

    大数据算法的课程笔记,包括四种中值搜索算法.包括最简单的先搜索后检索,平均算法复杂度为O(N)的简单随机选取算法,确定性的中值的中值算法,大概率返回中值的one pass算法. 1. 最简单的方法:先 ...

  8. 游戏开发中AOI算法总结

    定义 在MMO游戏中,在一些多人玩法中,通常出现很多玩家在同一张地图上移动的情况,假如一个玩家发生了移动,释放技能,更换装扮-这时就需要通知其他玩家,而如果通知整张地图上的所有玩家的话,显然是不现实的 ...

  9. spring 数组中随机取几个_游戏编程中需要掌握哪些数学物理知识

    一. 相似三角形知识的应用 在摇杆控制物体运动的游戏中,摇杆的手柄(下图黄色圆饼),不能移出摇杆所在的套(下图灰色圆环),也就是说摇杆偏离中心点的最大距离为max_R.一旦触摸移动过程中移动的点超出此 ...

最新文章

  1. Android Studio3.x上使用Lombok
  2. 2015/09/09夜晚js继续学习
  3. linux odbc 数据源测试,linux操作系统配置ODBC数据源
  4. 《动手玩转Arduino》——2.4 展望
  5. 剑指offer之重建二叉树
  6. java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍
  7. Integer与int的区别
  8. 蓝桥杯---等差数列(C语言)
  9. 3.3 tensorflow2实现Mann - Whitney U统计量检验法 ——python实战
  10. Java异步NIO框架Netty实现高性能高并发
  11. matlab2014a mex,在Matlab2014a中用MEX编译CUDA的问题
  12. 【LeetCode-面试算法经典-Java实现】【012-Integer to Roman(数字转罗马字符)】
  13. windows系统无法输入激活码
  14. Android多国语言包
  15. 计算机设备替换法,同义词替换表的挖掘方法及装置、电子设备、计算机可读介质与流程...
  16. 工作缺点和不足及措施_个人工作缺点和不足
  17. anyRTC 重磅推出在线实时 K 歌解决方案
  18. php连接mongodb数据库报错No suitable servers found
  19. 【2017年中总结】——半饱
  20. 【IP基本原理-ARP原理】

热门文章

  1. Windows恶搞脚本,太实用了医院WiFi很快
  2. python编程入门第一课教案_python编程从入门到实践 第一课:输入输出
  3. 测视力距离5米还是3米_装B冷知识 | 小孔镜为什么可以提高视力?
  4. iView 实现可编辑表格 1
  5. 使用 Dawn 构建 React 项目
  6. HTTP 协议中的 Transfer-Encoding
  7. 分布式版本控制工具 Git
  8. 是夫妻就一起把它戒了吧!
  9. Hadoop热添加删除节点(含Hbase)
  10. 位置采集[置顶] iPhone手机上的GPS位置信息采集与分享应用