分层状态机涉及的原理是什么,以及如何实现基本模型?

时间:2018-05-04 20:54:30

标签: c++ implementation hierarchical fsm

所以我试图用C ++制作游戏,我在CSSRule.cssText APIFinite State Machines (FSM)上阅读了大量文章。但是我会承认我读过的大部分内容都有点密集且难以理解,所以我希望有人可以为我简化它。 Hierarchical State Machines (HSM)

从我想澄清的内容:

  
      
  1. HSM与普通FSM有何不同,为什么游戏会更好?

  2.   
  3. 关于C ++,如何在状态模式之后实现基本HSM? (我可能在这个/使用错误的单词时不正确。)

  4.   
  5. 你究竟如何处理过渡?什么是on_exit和on_enter方法我一直听到很多?

  6.   
  7. 我的整场比赛需要一个HSM吗? (例如处理所有敌人,玩家行动,游戏菜单)还是使用多个HSM?

  8.   
  9. 实施玩家实体时,它们是否都是实体状态的子集?

  10.   
  11. 最后,如果有人可以提供一些伪代码来帮助查看这些问题,我将不胜感激。

  12.   

1 个答案:

答案 0 :(得分:3)

这只是关于筑巢。 HSM基本上是一个FSM,但每个状态又可以是一个单独的FSM。

对于游戏中的示例,请考虑使用NPC。它有多种状态:

  1. 步行到A点
  2. 等一下
  3. 步行到B点
  4. 等一下
  5. 从1
  6. 继续
  7. 与PC战斗
  8. 这个FSM很简单,但是当NPC被PC攻击时,所有州都需要转换到状态6(与PC战斗)。这使得FSM变得丑陋。因此,让这个更简单的FSM:

    1. 走来走去
    2. 与PC战斗
    3. 这个FSM非常简单,只有两个过渡,而且很容易理解。然后,状态1的主要部分是次要FSM:

      1. 步行到A点
      2. 等一下
      3. 步行到B点
      4. 等一下
      5. 如果某个事件与辅助FSM转换不匹配(如PC攻击),则会升级到顶级FSM以匹配该事件并找到合适的转换。

        您可以在某种程度上将其视为一个堆栈,更高级别的每个州都可以推动一个新的低层FSM。如果有一个偶数与任何可能的转换都不匹配,则弹出堆栈并返回一个级别。继续,直到有匹配的过渡。

        简而言之,这是一种简化FSM的方法。

相关问题