您的位置:首页 > 大数据 > 人工智能

游戏开发中的人工智能——基本路径寻找及航点应用

2013-08-15 16:06 447 查看
转转至
阅读笔记-游戏开发中的人工智能-第6章-基本路径寻找及航点应用

1. 基本的路径寻找

    从最基本得层次来讲,路径寻找只是让某个游戏角色,从其最初位置移向所需到达的目的地的过程而已。本质上,这一点和第二章中的基本追逐算法的原理相同。具体如:简单追逐追逐方法(最简单的使坐标逐渐相同)和视线追逐方法(使用Breseman方法)。但是,如果游戏环境中有障碍物,那么就需要考虑其他事情了。如下图所示,两种方法产生的路径都可能被障碍物阻截。

   


1.1 随机移动避开障碍物

    此方法适用于障碍物较少的情况,如下图,环境中的树木不是很多,随意移动一下巨人,玩家就能进入巨人的视线。这种方法简单有效,避免了负责路径算法对CPU的消耗。

   


if(玩家在视线内) {
采用直线路径走向玩家
}
else {
以随机方向移动
}


 

1.2 绕行障碍物   

    绕行障碍物是另一种简单的避开障碍物的方法。当你要在策略游戏或者角色扮演游戏中,找出一条绕过大型障碍物的路径时,比如绕过山区,这种方法相当有效。

    方法说明:· 假设单位透过障碍物看到目的地,但是不能够越过障碍物到达目的地。

                  · 让单位朝着目的地使用直接走过去,当遇到障碍物了,就沿着障碍物的边缘走。

                  · 当障碍物与目的地之间没有障碍物的时候,再朝着障碍物走过去。

   


2. 以面包屑寻找路径

    面包屑路径寻找方式可以让计算机控制角色看起来很聪明,因为是玩家在不知不觉间替计算机控制角色建立了路径。每次玩家走一步时,都会毫无所知地再游戏世界中留下看不见的标记或者面包屑。当游戏角色碰到面包屑时,就能凭着面包屑一路走下去。游戏角色会跟着玩家的足迹,直到追上玩家。

    面包屑方法也是计算机控制角色成群移动的有效方式。不必让群体的每个成员,都以费事费力的路径寻找算法找路径,可以直接让成员跟着领头者留下的面包屑走。

    思考:角色智能与否,要看玩家的路径是否智能,如果玩家在转了一个圆圈,再走出去,那么角色会完全复制玩家的路径,这样就不那么智能了。对于成群的单位也是这样,如果单位都是按照领头者的路线走,那么就只有一种路线,太单调了。关键还是要找到合适的使用情况。

    实际上,书中给出例子,也没有完全复制目标单位的路径,而是每次寻找最新的相邻的面包屑路径。这个图太模糊了,不上传了。这样就是在玩家走的路线中,做了一点点优化。   

3. 寻着路径走

    路径寻找通常仅被认为是从起点行走到所需到达的目的地的问题。然而,很多情况下,在游戏环境中,即使没有最终的目的地,也要让计算机控制的角色以仿真的现实的方式移动。例如,计算机控制的赛车就必须沿着赛车道前进。同样,策略游戏中,也许要让军队在城镇间的道路上巡逻。如下图:

   


     上图中,标示为1的地形元素视为道路,标示为2的地形元素视为道路边界以外的区域。我们不想让巨人在道路上随机移动,这种结果看起来不自然,我们想让让巨人看起来像是沿着道路行走。因此,我们需要分析周围地形,决定巨人的路径。

     核心思路是,每一步尽量沿着上一步的路线走。比如:上一步走的是向左上方,那么对8个方向给出8个权值,左上方的权值为+2,上方和左方的权值都是+1,右下方的权值是-1,其他方向的权值都为0。然后把这八个方向按权值从大到小排序,然后,选取数值最大的,且地形可以走到的位置,作为路径的下一步。最可能的是沿着左上方继续走,最不可能的是原路返回。

 

   



4. 沿着墙走

    和遵循道路走一样,这种方法也不会去算起点和终点之间的路径。沿着墙走更像是探索的技巧。有时候,需要让计算机控制的角色探索环境,以搜寻玩家、武器、燃料、宝物或任何游戏角色可以接触的东西。让计算机控制的角色在环境中随机移动,是游戏开发人员最常用的办法。如下图:

   


      一个简单的方法:左侧移动法。即每次巨人总是尽量向其左边移动,这样就能对环境做出较为完整的探索工作。但是要注意,左侧移动法,并不能保证巨人会进入到游戏环境中的每个房间。

     


5. 航点导航

    路径寻找是一项非常耗时,且耗用CPU资源的运算工作。减少这种困扰的方式之一,就是尽可能预先算好路径。航点导航减少这种困扰的做法就是,认真地在游戏环境中置放节点,然后,使用预先计算好的路径,或者是简单的路径寻找方法在节点之间移动。如下图:

   


    注意,图中的每个点,至少都能让另一个节点的视线看见。这样,游戏控制的角色总是能使用简单的视线算法,到达图中的任何地点。下一步,就是规定这些节点之间的关系。

   

 

      有了这个路径关系,两点之间的最短距离,就可以使用Dijkstra算法或者Floyd等算法实现。

6. 结束

    本章讨论的每种方法都有其优缺点,而且使用范围往往比较局限。下一章将要介绍的A*算法,可适用大部分的路径寻找问题。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息