游戏中常见的几种追踪算法

  所谓追踪,相对于另外一个角色来说是逃跑,首先需要做出追和逃跑的决策判断。

1.坐标追踪
       也是最基本追逐方式,他根据要追踪对象的坐标来修改追踪者的坐标,使两者的距离逐渐缩短。
        一个简单的例子:
              Point   m_pPrey;   /// 被追踪者
              Point   m_pAtta;   ///  追踪者
        对于追踪者来说:   新位置 =  旧位置 +  XY速度 ; 
            

 1 if ( m_pAtta.x  <  m_pPrey.x )
 2     m_pAtta.x  ++ ;
 3 else   if ( m_pAtta.x  >  m_pPrey.x )
 4     m_pAtta.x  -- ;
 5
 6
 7 if ( m_pAtta.y  <  m_pPrey.y )
 8     m_pAtta.y  ++ ;
 9 else   if ( m_pAtta.y  >  m_pPrey.y )
10     m_pAtta.y  -- ;

 
2.视线追踪
      视线追踪方式,主要是描述每一时刻都追踪者会沿着被追逐者之间的直线方向运动。如图所示:
                    
     通过图可以更好描述此问题,此问题的求解关键在于求出连接追踪者与猎物之间的直线,可以通过向量知道:2个向量想减即可得到。
     可以分别用追踪者与猎物的位置坐标构造出两个向量,假设b 代表追踪者位置向量,a 代表猎物位置向量。做向量减法a-b 便得到了向量c,将c 的起点置于追踪者的位置上,就得到了一条指向猎物的向量c. 此时,令:

     追踪者X 方向速度 / 追踪者Y 方向速度    =     c 向量x 轴分量/   c 向量y 轴分量 .即可求解。

3.拦截追踪
      所谓拦截追踪,如果考虑的是被追逐的目标太远,如果2者速度一样,或者相差不大,有可能很难追上,玩过实况足球的都知道,如果采用上面的2中追逐方式,可能错过最佳的防守位置。下面是拦截追踪的一个示例图:

   
    对于追踪者来说,他只需要知道被追踪者的位置,方向与速度,讲会计算一个最佳的拦截位置。然后你会发现这只是一个简单的追踪问题。且需要的时间t最少。


整个3种追踪的源码代码 以及 demo都共享:
/Files/expter/chase.rar

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值