路径寻找设计得不好会让游戏角色看起来很愚笨很不真实。A*算法可以提供有效的办法来解决路径寻找问题。它可以保证在任何起点及任何终点间找到最佳的路径,当然,前提是确实存在这种路径。如果起点和终点间没有障碍物,有明确的视线,那么用A*算法就大可不必了;改用既快速又有效的视线移动算法比较好。如果CPU功能不太强,A*也可能不是最佳替代方案。虽A*很有效,但仍然会耗用不少CPU运算能力,尤其是,如果你必须同时为许多游戏角色寻找路径的时候。
定义搜寻区域
需要以某种方式表示游戏世界,让搜寻算法能借此予以搜寻,并找出最佳路径。
这些节点并不直接对应任何可能的坦克位置,这样就需要太多节点了。我们必须把节点减少到可控制的数量内,这就是我们所说的必须简化搜寻区域。
A*搜寻算法必须知道节点是如何连接的,才能算出从任何节点到其他任何节点的路径。
开始搜寻
运用A*算法找出最短路径,同时避开障碍物。类深度优先算法
伪代码
把起始节点加进open list
while open list不为空
{
当前节点=open list中成本最低的节点
if 当前节点 = 目标节点 then
路径完成
else
把当前节点移入 closed list
检查当前节点的每个相邻节点
for 每个相邻节点
if 该节点不在open list中
and 该节点不再closed list中
and 该节点不是障碍物 then
将该节点移进open list并计算其成本
}
如图,砖块环境
记分
用路径得分(path score),找出起始砖块和目的地砖块间的最佳路径。
搜寻死路
任何两个指定点之间的有效路径,也可能不存在,我们如何得知?
地形成本
标准的A*算法是利用所经过的距离计算路径成本。然而,有时候还需要考虑其他因素,如较短的路径上有沼泽地,有如下地形。
这时需要对成本公式稍微做些修改。
影响力对应
地形成本通常是游戏设计者直接编进游戏世界里。影响力对应(influence mapping)是一种改变A*节点成本的方法,依据游戏里发生的情节而定。