我也不知道该怎么称呼这种搜索算法,这是我无意中看到一篇博客里面的demo(里面提到了JPS算法,确实是有点像,感觉跟Unity3d内置的网格导航是一类的)看起来有点像图论里面的完全图,总之就是把各个障碍物的顶点分别与其它障碍物的顶点逐一相连形成路径,然后过滤掉那些无法穿过的路径(即与障碍物的边相交的边)。之后只需要将动态的玩家(起始点)及目标点这两点作为新的节点加入到图中,做同样的处理得到完整的路径图。然后就跟A*比较类似了(反正我是这么处理的),将所有节点看做是地图上的格子(像之前例子中的方块格),从这些格子中逐步搜索出最小代价节点即可。
这算是我模仿那个demo的半成品吧,我是按照demo中给出的思路自己摸索出来的,大体框架已经出来了,随机设置障碍点这个功能还没做,不过也算是“五脏俱全”了吧。
还有我为了让动画更圆滑,还用了个比较精致的jquery插件(也算是偷懒,直接把点用html,而不用canvas画了)——transit。
下面是效果图: