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

坦克大战demo状态树中循环的作用

0 喜欢 0 不喜欢
216 浏览

image

为什么我把这个循环次数随便改都不影响结果,甚至我把这个循环删了,还是会不断的执行aimToAngle?
状态树上的这个循环在这里是不是没有意义?

我同时改了角度,加了断点,测试正确,证明我的链接和导出是没有问题的。

最新提问 5月 10, 2016 用户: qq_57319d2eb3282 (210 分)

1个回答

0 喜欢 0 不喜欢
 
已采纳

因为这棵树是通过agent.btexec()来调用的,而agent.btexec()在update里无论如何都被调用,也就是说当Tank_Fire_Random结束的时候,下一次agent.btexec()又被调用的时候,Tank_Fire_Random又被重入了。实际上这本身就是一个“循环”。所以,这里的0号的那个循环节点有没有对最后的结果看起来没有影响。

 

如果还有疑问,请仔细研读:http://www.behaviac.com/docs/zh/articles/concepts/,里面有详细的说明。

最新回答 5月 10, 2016 用户: jonygli (57,510 分)
采纳于 5月 11, 2016 用户:jonygli
我是想问,如果确实没有影响为什么这里要加这个循环?是有什么其他的目的,还是这里的用法是个不恰当的使用方式?
没有什么其他太多目的。

这里这样的使用是很灵活的。当然,个人推荐的方式是,BT的根节点最好是一个Loop(-1)节点。

为什么要加这个循环?应该是当初做这个demo的同事的尝试吧,没什么特别的目的(可能这样子的设置等待的时间他觉得刚刚好)。

这里可以完全可以把循环(2)删掉的。
非常感谢你的解释,解释的已经非常清晰了,原谅我再多问一句。

既然根节点最好都有Loop(-1)那是否可以不把agent.btexec()放在update里面?放到awake、start?感觉上每次update的时候去启动/检查bt,算不算一个不必要的逻辑?应该也会有所开销吧?

不行的,btexec必须要加到update里。

请仔细研读:http://www.behaviac.com/docs/zh/articles/concepts/,里面有详细的说明。

特别是下面的一段:

image

发现很多人确实对于理解这个有偏差。如果觉得不清楚,请一定仔细研读上面的链接,甚至最好试一试链接里提供的代码。

如果有更好的解释的话,也请反馈,我好更新下文章。

 

...