计算出让玩家或者角色从游戏地图中的A点到达B点的一条路径,目前常用

寻路算法是A*方式,但该方法搜索速度过慢,A-B间距离越远,速度越慢。

大家有更好的算法么?

大地图的话,提供个思路:
静态->用路点,在每个地块拐点的地方+路点,保证在地图的任何位置,

都至少有一个路点和该位置是可通的,最终得到一张节点图。
这个可以用编辑器可以手工设置,也可以算法程序自己生成。比如地图编

辑器会有刷MASK的功能,路点可以沿MASK块的凸点一段距离自己生成,

再连成图(可以参考天龙八部的编辑器)。
剩下的工作就简单了,寻路时先找离自己最近的路点,再找离目标点最近

的路点,然后沿着路点走过去就好了。
中间可以做一些优化,即:每过5s,如果当前位置可以直接看到下一个路

点(结束点),就跳过当前路点,沿直线过去。

动态->对RTS那种游戏,一般来说,确实需要A*算的,如果距离太长,

会把路径分割,每次只寻路一小段,让玩家先走起来,然后过一个间隔,

再寻路一次,避免一次卡死太长时间。所以你可以看到,war3中单位的移

动,如果你让他去A点,他会先往大概的位置上走,不停的寻路靠近中点的

方向,如果 被挡住了,他会回头的。因为路径太长,你寻出来也没意义,

中间是会被“挡”住的。

寻路算法上面的优化,可以参考3D游戏场景管理里面用到的OCTree的方法,

或者是四叉树。原理就是对相邻的可通过格子,组织成一个大的“区 块”,比

如16 * 16大小,每个区块,下面还是区块(4 * 4),一直到1 * 1,这样

整个是一个树结构。在寻路的时候,找到终点位于哪个树节点里面,再寻路

就可以了。这样可以大大减少A*递归的次数。

具体的寻路算法,可以参考http://www.ai-blog.net/archives/000091.html

 

还有一种算法,就是计算和保存地图中的通路信息,制作成链表,角色在寻径时,

直接查询这个通道表就可以了,我之前使用过这种算法,觉得速度还行,算一两

个角色时速度没有什么优势,角色数量多时,优抛就明显了。

 

Google之:"Navigation Mesh"。

posted on 2014-12-02 16:03  风云逸  阅读(633)  评论(0)    收藏  举报