这些都是我之前写在蛮牛上的帖子,现在放到博客里来
之前写了一个A*算法和navmesh算法的混合使用,以及前端使用navmesh,后端使用A*验证的思路。
http://www.manew.com/thread-42766-1-1.html
这几种扩展其实是依赖关系。以下内容皆是原创,没有在网络上见过类似的思路,所以献丑一次,欢迎交流。
提纲: 1.平滑A型算法的路径 2.A*算法的格子静态合并、优化A*算法的寻路性能 3. A*寻路向navmesh寻路的演进(navmes设计思路) 4.A*工具化
平滑A型算法的路径
如图1
我使用一种简单的情况来说明,假设在地图上寻路,如果从A点(灰色格子)寻到X点,那么使用普通A*算法寻路出来可能是这样的
现在格子很不规则,我们想使路径平滑,一般采用的策略是数个角度差异较大的路径点之间,通过插点,替换路径点,来实现。
我们现在采用另一种方式,
步骤1:
先对所有路径点循环,如果两个顶点,比如B-C矢量为垂直/平行 于地图起始的 1-2顶点矢量,则 B-C顶点合并。
通过图片2
我们可以看到,B-C-D-E与1-2顶点矢量平行,所以可以合并为BCDE点,F-G点与1-2顶点矢量垂直,所以F-G合并为FG点。(这里要注意, ABCDE---F矢量 与ABCDE本身矢量不同,不能再合并。所以中断合并,从F点重新判断,F和G