Go游戏服务器开发的一些思考(十三):behavior3go的一些坑(备忘)

内容提示

使用behavior3go已经一段时间,主要用它来实现AI、技能。
总体来说,非常好用,不管在设计上,还是编码上。

这里记录几个开发过程成中遇到的坑。

默认前提:某一时刻只能处于一种状态

根据有限状态机理论,某一时刻只能处于一种状态。behavior3go也是遵守这个前提的。

如有同事为了便利,写了个自定义composite,来处理同时可以让多个分支处于RUNNING状态。这显然破坏了默认前提。因此运行过程中,总有些分支被无故关闭。

Blackboard是唯一的数据来源

根据behavior3go的设计思路,树对象是可以复用的,行为树的数据则是放在Blackboard实例中。

如每个Player对象都有一个Blackboard实例。这样它们可以复用一棵行为树,在行为树的每个Tick时,传入自己的Blackboard实例,来得到自己的行为。

然而在开发过程中,有不小心的、或是状态不佳下,有可能会把某个字段定义在Action中了,会埋下比较深的坑。一般开发过程中不易发现BUG。只有该Action大量被执行中时,才会暴露出问题来。

切换树前时,切记关闭上个树

通常情况下,一棵树会正常执行,知道关闭。但是实际应用会更复杂。

比如在做技能时,通常会把受击行为也做成技能行为树。这时候,技能释放过程中,就会有几率被打断,更换为受击行为树来执行。所以这种情况,切记先把旧树关闭,再执行新树。

树的横向扩展

behavior3go是每次Tick都是从根节点开始执行的。如果树的层次越深,如N层。则每次执行需要遍历的N个节点。

同时为了更好的维护一棵树,也不会建议把行为树设计的很复杂。

比如技能的行为树,显然会把一个技能对应1棵行为树。服务器根据客户端指令,来选择对应的某棵技能行为树来执行。

同理,其他系统也是这个道理。可以有很多简单、内敛的行为树,根据精心设计好的决策算法,选取一棵来执行。这样就可以达成横向扩展。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fananchong2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值