行为树的初步学习(一)

	行为树运用了面向对象的思想,通过将程序逻辑细分为多个叶节点从而实现了面对一系列复杂事件时可以智能化处理的一种代码逻辑。通过不断拓宽叶的分支,从而实现对于事件逻辑的深度智能化实现。
	今天进行对行为树的初步学习。首先我们先了解行为树的整体结构。
最简单的行为树是由控制节点、执行节点、状态判断所组成。
	首先控制节点是对于触发节点的消息进行反馈,并发出执行指令。
	执行节点收到来自控制节点的指令之后开始执行具体指令。通过具体指令的反馈返回行为树节点的状态。
	行为树想要完成的目标是对某物的某一具体事件进行智能化的反馈,并通过具体事件的情况分析完成精确的控制和执行。
	通过是否触发节点和是否执行任务对具体事件进行具体分析,并通过行为树可以完成对某一行为的具体化反馈、智能化执行。
	***行为树控制节点***
	**fallback:**是行为树的控制节点,从左到右对子节点进行tick,相当于或运算。当fallback,从子节点返回success、runing时,马上返回success或running。通过对子节点优先级的排序,完成对不同行为的具体执行。
	**fallback with memory**行为树会对之前的failure的节点进行记录,并在之后的tick时将这些节点跳过。但是在这一过程之中,会使逻辑运行出现反应性损失,即被跳过的分支节点不再会运行。
	**sequence**行为树的另一种控制节点,从左到右对子节点进行tick,相当于与运算。当所有子节点都返回success的时候,返回success,当有一个子节点返回failure时,它马上返回failure。
	*sequence和fallback都是具有先后判断顺序的逻辑行为。*
	**sequence with memory**和fallback with memory一样都会记录节点,不同的是sequence记录的是success节点,而fallback所记录的则是failure的节点,在下一次tick时变回跳过这些所记录的节点。
	**parallel**并发执行所有子节点,同时执行所有子节点。(总共有n个节点,当有m个节点返回success时,返回success,当有多与n-m个节点返回failure时,返回failure)。
	**decorator**作为修饰子节点的执行或者返回状态。如negation(将子节点返回的状态反转再返回,子节点返回success,negationnode返回failure,子节点返回failurenegationnode返回success)
	***行为树的执行节点***
	Action节点:
		执行一个具体的行为,若成功完成则返回success,如果无法完成则返回failure,若正在运行中则返回running,一般创建新线程执行行为算法。
	Condition
		用于判断是否满足条件,是对环境或者任务的状态进行判断是否满足执行条件,不返回running,而且不会改变任何变量或者是状态。
		action和condition节点只是一种抽象类型,在实际使用中我们还是需要结合具体的应用来实现功能。
	***行为树的执行方式***
		行为树常见的有两种执行方式,分别是阻塞式和非阻塞式。
		**非阻塞式**一般用于执行不紧急的任务上,通过condition对条件进行判断,通过action将任务引导到需要执行的子节点上,最后来执行任务。
		**阻塞式**用于紧急任务,将其余条件阻塞,只执行一条子节点分支。
		***行为树的节点间通信方式***
				行为树通过黑板机制实现节点间信息的交互。
				黑板模式:是一种常见的程序设计的方法,通过此设计我们可以实现数据的读写同时进行,并对数据的读取进行限制,我们可以选择让谁只能看到哪一部分数据,就好像,学生只能看到自己教室中黑板上的文字一样

黑板模式的消息交互图 黑板模式是消息的广播,主要解决消息的生产者和消费者之间的耦合问题,核心是消息存储(黑板),它存储所有消息,并可以随时被读取。当然,消息的写入者也可以变身为消息的阅读者,读写者在时间上解耦。对于这些消息,消费者只需要关注特定消息,不处理与自己不相关的消息,这一点通常通过过滤器来实现。
行为树通过黑板模式的主要流程图
行为树的判断逻辑是,先通过时间驱动判断事件是否紧急,判断结束之后,进入事件驱动,进行结点间的通信。还可以引申到树和树之间的通信。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值