• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱
欢迎来到 behaviac Q&A。 您在bbs里的问题,管理员会当下就收到通知,不要担心管理员看不到您的问题。也请在bbs里提供您的email,这样就可以第一时间收到关于回答,评论的email的通知了。 为了节省大家的时间,请表达好你的问题,提供必要上下文,版本号,平台信息,重现步骤等。

在行为树执行的过程中,有没有办法执行完某个动作之后,打断当前的执行,从头重新开始执行?

0 喜欢 0 不喜欢
2,632 浏览

如题。比如说一个行为树的根节点root为并行节点,下面有三个子节点A,B,C,这三个节点下面又分别有两个子节点A1,A2,B1,B2,C1,C2,当执行到B2的时候,如果B2返回失败,我想让行为树从头开始执行,root->A->A1->A2->B->B1->B2...这样的操作支持吗?

image

最新提问 3月 22, 2016 用户: vectorguo (240 分)
修改于 3月 22, 2016 用户:jonygli

1个回答

1 喜欢 0 不喜欢

当然支持啦。具体的实现方式要看你具体的行为树。

如果就如上图一样的话。还要看Parallel的父节点是什么节点。

Parallel节点可以配置失败和成功条件http://www.behaviac.com/docs/zh/references/parallel/

image

可以根据自己的需要调整。

如果就是你上面的行为树的话,如果Parallel的父节点是Loop,则缺省的,它自然就是按你的需要工作了。

因为B2失败,则B失败,则Parallel失败,则Loop重新开始。

image

不理解的话,请仔细参考下面的链接的说明:

http://www.behaviac.com/docs/zh/articles/concepts/

 

最新回答 3月 22, 2016 用户: jonygli (58,410 分)
谢谢哈,再问您一个问题哈。假如Parallel有一个打断条件Condition,然后现在执行到B1节点了,B1节点返回的是Running。

之后每一帧执行的时候应该是先从B1节点开始B1->B->Parallel,那打断条件Condition是在B1节点执行前就检测了对吧,我看源码应该是这样的,对吗?

首先“Parallel有一个打断条件Condition”什么意思?你是说Parallel有一个失败条件Policy吧?

失败条件Policy是在B1执行后,根据B1->B的执行结果来做判断的。

另外,请仔细参考下面的链接的说明去理解行为树的执行。

http://www.behaviac.com/docs/zh/articles/concepts/

sorry,我说错了,把Parallel换成Selector,中断条件是不是在每次从上一帧返回Running状态的子节点执行前执行的啊?
中断条件是在执行子节点之前检查的。代码里很清楚。
...