评论

A*寻路算法在微信小游戏制作工具中的实现

在微信小游戏制作工具中实现A*寻路算法

嗨!大家好,我是小蚂蚁。

上一节里我们详细讲解了A*寻路算法的原理,这一节我们就在微信小游戏制作工具中实现一下这个算法。

几个概念

在正式开始之前,我们还是先了解几个重要的概念,以便于接下来你能够顺畅的阅读理解。

估值函数

用于计算寻路过程中的节点的估值,每轮查找算法都会选择估值最小的节点,然后以它为中心继续查找。

开放列表(OpenList)

保存的是当前需要关注的点,一般指的是当前寻路点周围的那些相邻的节点。

关闭列表(CloseList)

保存的是已经被处理过的节点,即以一个点为中心查找周围的一圈节点,查找完成之后,这个位于中心的节点就会被放到关闭列表中。

如图,假设这一轮查找以 5 号节点为中心,查找其周围一圈相邻的节点,查找完成后,开放列表和关闭列表就是右图的状态,然后接下来要做的,就是从开放列表中找出估值最小的节点,然后以其为中心继续查找周围的节点.....一直重复这个过程,直到最终找到目标节点为止。

A*寻路算法的描述

这里我们使用 OpenList 表示开放列表,CloseList 表示关闭列表,节点的实际代价用 g(n) 表示,估值用 f(n) 表示,然后使用伪代码来详细的描述一下 A*算法的整个执行过程。

  *初始化清空OpenList和CloseList列表;
	*将起点加入OpenList中,并设置估值为0(估值最小);
	*如果OpenList不为空,则从OpenList中选取估值最小的节点n: 
  	*如果节点n为终点,则: 
    	*从终点开始逐步追踪父节点,一直达到起点;
    	*返回找到的结果路径,算法结束;
  	*如果节点n不是终点,则: 
    	*将节点n从OpenList中删除,并加入CloseList中;
    	*遍历节点n所有的邻近节点: 
      	*如果邻近节点m在CloseList中,则: 
        	*跳过,选取下一个邻近节点
      	*如果邻近节点m在OpenList中,则: 
        	*计算并判断节点m的新的g(n)值是否小于原来的g(n)值,如果小于,则重新设置节点m的g值,f值和父节点等数据
      	*如果邻近节点m不在OpenList中,则: 
        	*设置节点m的父节点为节点n
        	*计算节点m的估值f(n)
        	*将节点m加入OpenList中
   *如果OpenList为空,则所有节点查找完毕,没有找到合适路径;

以上就是整个寻路算法的执行过程了,其实并不复杂,如果能够把这个过程理解透彻了,那接下来做的时候就会简单很多。

该教程为付费教程,剩余部分可前往公众号文章中阅读。

https://mp.weixin.qq.com/s/rMJXkfECYXMYOZHtGWaOLw

点赞 0
收藏
评论
登录 后发表内容