AI行为树关键字分析

Decotator(装饰)既然作为条件判定分为了三种判定类型,

第一:控制输入的类型,比如BlackBoard

第二:控制输出的类型,比如Force Success

第三:控制执行方式,比如Loop

系统中自定义了很多常用的Decotator,IsAtLocation(判断是不是在某个坐标)

ForceSuccess(强制输出成功)

CampareBBEntris(比较两个黑板Key)

Loop(循环,可以设置次数)

ConditionLoop(达成条件在进行循环)(条件通过KeyQuery设定)

Composite(混合,将两个装饰放在一起判定)(可以双击打开进行自定义设置条件)

Cooldown(冷却)(执行完成后等待时间返回失败)

Does path exsit(判断一个点到另一个点是否有导航路径)

Is BBEntry value of given Class(判断黑板Key是什么类型)

ConeCheck(判断目标点是否在圆锥体中)(伤害)

TimeLimit(时间限制)(节点中事件在规定时间内没有完成就返回失败)

ConditionalLoop(有问题)()

而且Decotator还可以自己定义,新建一个打开,使用PerformConditionCheckAI的函数进行判断并返回布尔值,来达到条件的判定。

Service

Service用于附着在Compositse,常用于更新检查黑板。以行为树的形态取代了传统分支节点,而且可以说Service自己有自己的时间轴,一旦获得焦点就开始自己的时间,可以在Detail面板中的Service设置Intrval(间隔,休息时间)(帧之间间隔的时间)以及RandomDeviation(自由偏差)。

更新的话就是说可以将数据输入到黑板上的过程可以写在这里

(比较能体现行为树与状态机的区别

Simple Parallel

支线与主线的区别有两点

1.Imm跟Delay的区别

Imm跟Delay的区别就是,前者将在主线Finish后迅速abort支线,返回上一级,而Delay就会等待直线任务结束再返回,但是记住不管那种情况都要Finish,假如说主线Finish后打断了支线,那么此时支线是被abort的,其中要有abort事件来Finishabort。

返回必须要两者都Finish的,不然将会陷在某个地方。

2.并行节点返回的成功与否是由MainTask决定的,这是无可厚非的。MainTask成功,则Simple Parallel是成功的,反之亦然。

3.这里有一点要注意,虽然是并行,但是还是有顺序的,只是差值很小,跟蓝图中的Sequence一样,主节点还是有一点优先时间的,例子就是,在主任务的Begin后添加一个Finish,那么就会出现支线不会执行,说法是主线一开始就结束,支线还没有开始就被主线返回了。

4.还有一种情况是,如果支线完成了,此时主线还没完成,那么支线会重新执行,直到主线也完成。

5.不过事件的执行一般很少有在过程中的事件(例如Delay),如果以帧为单位调用事件的话,就不会存在打断情况。

命名:事件是动词加名词,条件(装饰)命名为IsXXXXX

时间: 2024-10-26 08:30:32

AI行为树关键字分析的相关文章

(转)Linux内核基数树应用分析

Linux内核基数树应用分析 ——lvyilong316 基数树(Radix tree)可看做是以二进制位串为关键字的trie树,是一种多叉树结构,同时又类似多层索引表,每个中间节点包含指向多个节点的指针数组,叶子节点包含指向实际对象的指针(由于对象不具备树节点结构,因此将其父节点看做叶子节点). 图1是一个基数树样例,该基数树的分叉为4(2^2),树高为4,树的每个叶子结点用来快速定位8位文件内偏移,可以定位4x4x4x4=256(叶子节点的个数)页,如:图中虚线对应的两个叶子结点的路径组成值

最优二叉树(霍夫曼树)分析

 1.树的路径长度     树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Path Length of Tree,简记为WPL) 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数. 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积. 树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为: 其中: n

二叉查找(排序)树的分析与实现

二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 图from baike 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值: (3)左.右子树也分别为二叉排序树: (4)没有键值相等的节点. 步骤:若根结点的关键字值等于查找的关键字,成功.否则,若小于根结点的关键字值,递归查左子树.若大

线段树/学会分析每个数值最多被修改的次数

You are given an array of N integers. You should support the following queries on this array. 0 L R : Find the minimum integer in the range AL, AL+1, ..., AR. 1 L R X : You should apply the assignment A[i] = A[i] & X, for all indices i in range [L, R

决策树(回归树)分析及应用建模

一.CART决策树模型概述(Classification And Regression Trees) 决策树是通过一系列规则对数据进行分类的过程.它提供一种在什么条件下会得到什么值的类似规则的方法.??决策树算法属于有指导的学习,即原数据必须包含预测变量和目标变量.决策树分为分类决策树(目标变量为分类型数值)和回归决策树(目标变量为连续型变量).分类决策树叶节点所含样本中,其输出变量的众数就是分类结果:回归树的叶节点所含样本中,其输出变量的平均值就是预测结果.? 决策树是一种倒立的树结构,它由内

C++11模板句柄的实现:委派构造函数、default关键字分析

C++11,使用委派构造函数,并且快速初始化变量,default关键字重声明默认构造函数,回复pod状态.分析与推荐用法. 目前为止,VS2012和2013对异常声明的兼容还是停留在代码沟通的级别,没有进行编译类型检查,出现如下错误可忽略. warning C4290: 忽略 C++ 异常规范,但指示函数不是 __declspec(nothrow) 下为:VS2012不支持委托构造函数,建议使用cocos2d-x 3.2及版本的朋友更新VS至2013版. 1>d:\cpp_lab\testque

Java基础(二)-static关键字分析

static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改变其(private.protected.default和public)作用域的范围): 修饰成员变量(非局部变量) 修饰成员方法 修饰代码块 修饰内部类 静态导包 怎么会有五种呢,大部分初学者对前面两种或者加上第三种还是很熟悉的,第四种情况可能一开始的人就比较少知道了,第五种就更少人知道了.下面一

AI行为树的工作原理

最近在项目中应用到了行为树,在网上看了不少关于行为树的文章,其中有一篇文章我觉得写得非常到位,它的原文是英文.在这篇文章里我会它的大致意思给翻译出来(注:由于原文有不少啰嗦的地方,所以没有逐句的翻译),以它的行为结构为标准,并会在译文中穿插一些自己的理解来谈谈我眼中的行为树. 原文链接 一.介绍 尽管网上已经有大量关于行为树的教程,但是在开发游戏中的 AI 时还是遇到了不少关于行为树的问题.很多教程不关注于代码的实现,而是给出一些非常笼统的节点图,就像这样: 这些节点看起来非常的抽象,这对于我了

c++中4个与类型转换相关的关键字分析

static_cast reinterpret_cast dynamic_cast const_cast 1.**static_cast------运算符完成相关类型之间的转换** 使用场景:如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等. 例:  1,  int m=10; double n=static_cast < int > m;   2, int * q=static_cast < int* >(malloc(100)); 2.**