[AI-Steering编程]六.躲避行为

六.躲避行为
你应该意见猜到了,躲避行为是追捕的反行为,它与追捕的不同点在于,追捕是在seek”未来目标”,而躲避是在flee”未来目标”:

                   public function evade(target:Vehicle):void {
                            var lookAheadTime:Number = target.position.dist(_position) / _maxSpeed;
                            //计算此时追上目标的预计时间,即lookAheadTime.
                            var predictedTarget:Vector2D = target.position.add(target.velocity.multiply(lookAheadTime));
                            //在这段时间内,目标以现在的速度,预计会到达的位置,即"未来目标"
                            flee(predictedTarget);
                            //避开这个"未来目标"                

2009-12-28 21:20


6-1-Evade.swf (4.27 KB)


在示例” 6-1-Evade.swf”中,我创建了两对儿机车,红色机车seeker,白色机车fleer,以及绿色的机车evader,蓝色的机车pursuer.他们之间的关系是

                            fleer.flee(seeker.position);
                            fleer.update();
                           
                            seeker.seek(fleer.position);
                            seeker.update();
                           
                            pursuer.seek(evader.position);
                            pursuer.update();
                           
                            evader.evade(pursuer);
                            evader.update();

通过上面的示例,可以看到白色的机车fleer,在傻乎乎的flee红色的seeker,红色的机车seeker在后面追,白色的fleer就往前跑.而绿色的evader就很”狡猾”的躲避蓝色的pursuer,这有点像篮球的变向过人,知道pursuer会往那个地方追我,我就来个急转弯,避开它!
文档Evade类如下:

package 
{
         import flash.display.Graphics;
         import flash.display.Sprite;
         import flash.events.Event;
        
         import ladeng6666.steering.Vector2D;
         import ladeng6666.steering.Vehicle;
         import ladeng6666.steering.TargetObj;

         public class Evade extends Sprite
         {
                   private var fleer:Vehicle;                                  //机车实例         
                   private var seeker:Vehicle;                      //添加红色的机车,来seek白色的机车
                   private var pursuer:Vehicle                     //添加蓝色的的机车,来pursue白色的机车
                  private var evader:Vehicle;                     //创建绿色的机车,来evade蓝色pursuer的寻找
                  
                   public function Evade()
                   {
                            fleer = new Vehicle();
                            fleer.position = new Vector2D(100, 200);
                            fleer.edgeBehavior = Vehicle.BOUNCE;
                            seeker = new Vehicle(0xff0000);
                            seeker.edgeBehavior = Vehicle.BOUNCE;
                            pursuer = new Vehicle(0x0000ff);
                            evader = new Vehicle(0x00ff00);
                            evader.position = new Vector2D(100, 200);
                            evader.edgeBehavior = Vehicle.BOUNCE;
                           
                            addChild(fleer);
                            addChild(seeker);
                            addChild(pursuer);
                            addChild(evader);
                           
                            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
                   }
                   //按照帧频随速度更新机车的位置
                   private function enterFrameHandler(e:Event):void {
                            fleer.flee(seeker.position);
                            fleer.update();
                           
                            seeker.seek(fleer.position);
                            seeker.update();
                           
                            pursuer.seek(evader.position);
                            pursuer.update();
                           
                            evader.evade(pursuer);
                            evader.update();
                   }
         }
}


本章源代码:
chapter6.rar (15.53 KB)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值