简直是作弊的fusm(模糊状态机)

 模糊状态机和状态机的区别就在于模糊状态机可以同时有好几个状态。这些状态有不同的重要度,然后根据重要度不同,状态的每帧逻辑更新函数的逻辑也有不同。
上一篇博客讲述了状态机了,这一篇就不讲相同的部分了。

比如我们设定一个由ai控制的坦克,这辆坦克可以不受发射炮弹的时间的限制,可以自由转动角度,可以以任意速度前进。(作弊!这简直是作弊!)

那么这个坦克拥有三个状态:
状态一:发射炮弹
状态二:转动角度
状态三:前进

那么状态机中就可以有一个成员函数:计算重要度();来计算这三个状态的重要度。
状态机::计算重要度()//你可以设计其他的计算重要度的逻辑
{
    如果 敌军坦克不在射程
    {
        发射炮弹重要度=0;
    }
    否则
    {
        发射炮弹重要度 = 反比(敌军坦克离自己的距离);
    }   
    如果 有敌军坦克且敌军坦克与自己有一个角度
    {
        转动角度重要度 = 反比(敌军坦克离自己的距离);
    }       
    否则
    {
        转动角度重要度 = 0;
    }
    如果 敌军坦克离自己很远
    {
        前进重要度 = 正比(敌军坦克离自己的距离);
    }
}

发射炮弹状态::每帧逻辑更新(每帧间隔)
{
    static 记录持续时间 = 0;
    记录持续时间 += 每帧间隔;
    如果 记录持续时间 》 反比(发射炮弹重要度)
    {
         发射炮弹();
         记录持续时间 = 0;
    }
}

其他两个状态的逻辑更新同理。
状态机::每帧逻辑更新()
{
    遍历 状态列表
       每个状态-》每帧逻辑更新();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值