用处:
A星寻路就是用来计算玩家行进路径的,通过它可以计算出避开阻挡的最短路径
基本原理:
A星寻路算法的基本原理就是不停的找出自己周围的点,选出一个新的点作为起点再循环的找,一直倒到终点。
重点 : 每次从新的点找周围的点时,如果周围的点已经在开启列表或者关闭列表中,那么我们就不用再去找一遍这些点了。
关键 : 每次往关闭列表中放点时,我们都应该判断这个点是不是和终点一样,如果一样,证明路径找完了,如果不一样,则继续找。
详情原理:
1: 算法公式:f(寻路消耗) = g(离起点的距离) + h(离终点的距离)
2: 开启列表 (每次起点周围的点,看基本原理)
3: 关闭列表 (每次查找周围的点找出的最优点)
4: 格子对象的父对象(记录着自己的上一个格子)(我们最终找路径的时候是通过这个父对象回拉来计算出路径)
为什么开启列表中存储的路径点不会清除,为什么不用关闭列表中的点作为路径:
开启列表中存储的点不会清除,因为有可能一开始就走了弯路(找错了大方向),所以我们关闭列表中的点并不是所有都对我们有用,所以开启列表中的点不会被清除掉,会一直存着。
需求分析:
A星寻路管理者->管理所有的格子(单列)
属性:
格子[,] nodes;//二维数组
List<格子类> opendLit;//开启列表
List<格子类> closeList;//关闭列表
int mapW;//地图的宽度
int mapH;//地图的高度(长度)
方法:
void Init(int w,int h);//初始化地图格子的方法(宽,高)
void 寻找路径的方法( 起点,终点)
格子类
属性:
float f;
float g;
float h;
格子父节点 father;
int x,y;
各种类型 type;
方法: 构造函数
下面是代码:
格子类:
A星寻路管理类:
测试类: