行为树

参考了https://www.cnblogs.com/cnas3/archive/2011/08/14/2138445.html

和pomelo-bt:https://www.npmjs.com/package/pomelo-bt 或者 https://github.com/NetEase/pomelo-bt

个人理解:各个节点有suc,fail,waiting状态,是因为是按帧执行,没执行完的不需要返回确定的结果,所以需要有waiting状态。

以及图上的那个节点逻辑感觉有些问题,比如约会节点是选择节点,如果买花逻辑返回true了,就不去见女友了?这个逻辑说不通,其他节点没细看,大致是这么回事,这个需求的逻辑节点其实实现方式可以很灵活,也就是说主要看行为树怎么去设计,可能每个人实现的方式不同。

==================================分割线==================================================

行为树常被用来实现游戏中的AI。每次执行AI ,都会从根节点遍历整个树,父节点执行子节点,子节点执行完后将结果返回父节点。下面是基本的四个节点:

 

1 *顺序节点(Sequence):属于组合节点,顺序执行子节点,只要碰到一个子节点返回false,则返回false,否则返回true,类似于程序中的逻辑与。
2 *选择节点(Selector):属于组合节点,顺序执行子节点,只要碰到一个子节点返回true,则返回true,否则返回false,类似于程序中的逻辑或。
3 *条件节点(Condition):属于叶子节点,判断条件是否成立。
4 *执行节点(Action):属于叶子节点,执行动作,一般返回true。

 

 

关于更多关于行为树概念上的东西,大家很容易找到相关的资料,这里不再最赘述,主要是通过一个实际的例子来看行为树在AI上的应用。

 

这是AI文字表达的方式:

 

 

如果不是情人节,我们的Avatar将去球场打球,如果是情人节,他将带上一束花去见他的女友,但是他可能没带钱,所以他要先回家拿钱,然后去花店买花,再去
见他的女友,如果女友还在约会地点,则将花送给女友。

 

下面是用行为树表达的方式:

 

 

上面的图让我们能很容易指导我们的代码编写,我们需要完成所有的叶子节点,然后将他们按照图示,放到相应的组合节点中去,然后不停的遍历整个行为树。

 

我使用AS3完成了下面的demo,去实现上图中的行为树AI(如无法观看请下载最新的FlashPlayer)。

 

 

在Flash中,蓝色的圆表示AI控制的Avatar,你可以通过点击不同选择框来改变当前的条件,Avatar会根据条件做出不同的反应。

行为树很适合做AI编辑器,我们定义好一些条件和动作,策划人员通过简单的拖拽和设置即可实现复杂的游戏AI。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值