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

2023-10-10 20:50
文章标签 ai 行为 编程 躲避 steering

本文主要是介绍[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)

这篇关于[AI-Steering编程]六.躲避行为的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183009

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

三频BE12000国补到手2549元! ROG 魔盒Pro WIFI7电竞AI路由器上架

《三频BE12000国补到手2549元!ROG魔盒ProWIFI7电竞AI路由器上架》近日,华硕带来了ROG魔盒ProWIFI7电竞AI路由器(ROGSTRIXGR7Pro),目前新... 华硕推出了ROG 魔盒Pro WIFI7电竞AI路由器(ROG STRIX GR7 Phttp://www.cppcn

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁