行为7

本文介绍了一种路径跟随算法,该算法使智能体能够沿预定路径移动。通过接近一系列检查点(wayPoint),智能体使用“Seek”行为移动到下一个检查点,直到到达最后一个检查点时改用“Arrive”行为减速停止。适用于需要智能体访问一系列检查点的应用场景。
路径跟随,就是按照指定的路径行驶
   1目的

如题,机车按照指定的路径行驶


   2实现

靠近路径的wayPoint,Seek下一个wayPoint


   3讨论

路径跟随的基本思路就是假设在路径上有nwayPoint,

这样机车的路径跟随就可以化解seek一个一个的wayPoint,

这样就不用路径中那些弧形弯而犯愁了.好了,看看程序怎么实现吧.


首先我们要向一个wayPoint进行行驶,如前面讲的使用seek方法,当机车wayPoint的距离dist小于特定的pathThreshold,

seek下一个wayPoint

,直接看代码吧,更加明了:



                   public function followPath(path:Array, loop:Boolean = true):void {
                            //当前的wayPoint
                            var wayPoint:Vector2D = path[_pathIndex];
                            if (wayPoint == null) return;
                            //是否到达当前wayPoint
                            if (<span style="color:#ff0000;">_position.dist(wayPoint) < _pathThreshold</span>) {
                                     if (_pathIndex >= path.length - 1) {
                                               //如果是最后一个wayPoint,如果循环,返回到第一个wayPoint
                                               if (loop) {
                                                        _pathIndex = 0;
                                               }else {
                                                        <span style="color:#ff0000;">arrive(wayPoint);</span>
                                               }
                                     }else {
                                               //如果已经到达,<span style="color:#cc0000;">seek下一个wayPoint</span>
                                               _pathIndex++;
                                     }
                            }else {
                                    <span style="color:#ff0000;"> seek(wayPoint);</span>
                            }
                   }


------------------------------------------

c++


它适用于大多数需要智能体访问一系列检查点的情况

如果是封闭的路径,应该回到第一个路点重新开始

如果是开放的路径,交通工具减速(arrive)在最后的路点上。


//------------------------------- FollowPath -----------------------------
//
//  Given a series of Vector2Ds, this method produces a force that will
//  move the agent along the waypoints in order. The agent uses the
// 'Seek' behavior to move to the next waypoint - unless it is the last
//  waypoint, in which case it 'Arrives'
//------------------------------------------------------------------------
Vector2D SteeringBehavior::FollowPath()
{ 
  //如果离当前目标足够近,移到下一个目标(用距离平方计算)
  if(Vec2DDistanceSq(m_pPath->CurrentWaypoint(), m_pVehicle->Pos()) <
     m_dWaypointSeekDistSq)
  {
    m_pPath->SetNextWaypoint();
  }

  if (!m_pPath->Finished())
  {
    return Seek(m_pPath->CurrentWaypoint());
  }

  else
  {
    return Arrive(m_pPath->CurrentWaypoint(), normal);
  }
}


该行为对于   最大操控力/最大速度比率     和     变量 m_WaypointSeekDistSq        很敏感。 ????????????改变值观察有什么不一样。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值