如何快速进行A* 寻路

下班了,没有事情作,之前一个人作游戏的时候,因为压力很大,所以特别喜欢写博客,但自从上班之后,再写博客的动力几乎就没有了。这就是为什么,原来在手机游戏这一块有很多的高手,现在都不怎么在网上活动了的原因。
    今天来说一下我们作游戏时最常用的一种游戏地图中绕过障碍物的自动寻路算法吧。这个其实之前已经有很多的高人写过了,我只是把他们的文章进行了一下整理和总结罢了。
    今天的这个文章的基本思路是这样的,我会先介绍一下什么是A* 寻路,然后会说到A*寻路中为了提高寻路速度的最好排序算法--二叉堆排序。再接着会聊一下C++中的STL库中使用std::vector的二叉堆对一个结构体数据进行排序。因为STL中的排序用到的是STL中的比较用的是 仿函数,所以要对结构体或者对象根据属性值来排序列就必须要对比较操作符">"或者"<"进行重载。
    好了,先说A*寻路,我就懒得写了,大家参考一下这个博文吧: http://blog.csdn.net/lufy_legend/article/details/5733733
    A*寻路的大体思路是,从起始点开始,一点一点的将要寻找的可能节点加入寻路开放数组中,而这个开放数组就要用到我们说的二叉堆排序。当然,也可以用快速排序。这样我们可以每一次都取出花费最少的节点,再最后,将找到的关闭节点,反向回来,就可以得到我们的A*寻路路径了。
    真的是懒得复制了,大家还是看别人讲的一个有关二叉堆排序列的博文吧:
   这个博文真的写的非常好。简单明了。我也就不多说了。
   然后就是关于使用STL中的二叉堆排序方法的四个函数了。参考下这个博文:
make_heap():建立二叉堆。
push_heap(): 给二叉堆中添加数据。
pop_heap():   删除二叉堆顶数据。
sort_heap():      排序列二叉堆。
大家参考一下,文作者也讲的很明白,只是关于比较操作符的重载写的太少了:
关于C++中的操作符重载,大家可以参考下下边的这个博客:
总的来说,A*寻路也就这样了。没有什么新的东西了。写一个模块可以终身受用了。这两天在弄一个关于六边形的瓦片地图的A*寻路,有很多的坐标变换,还是要下一翻功夫的。这可能就是为什么使用六边形的瓦片地图编辑器会比较少的原因吧。等下次我来分享一下六边形坐标变换上想的一些算法吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值