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

Riv*_*asa 3 c++ implementation fsm hierarchical

因此,我尝试使用C ++进行游戏,并且阅读了很多有关有限状态机(FSM)分层状态机(HSM)的文章。但是,我将承认我阅读的大部分内容都有些密集且难以理解,因此我希望有人可以为我简化它。这是FSM还是HSM?

根据我想清除的内容:

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

  2. 关于C ++,如何按照状态模式实现基本的HSM?(我可能对此不正确/使用错误的单词。)

  3. 您如何精确地处理过渡?我经常听到的on_exit和on_enter方法是什么?

  4. 我整个游戏需要一个HSM吗?(例如处理所有敌人,玩家动作,游戏菜单)还是我使用多个HSM?

  5. 在实现玩家实体时,它们是否都是实体状态的子集?

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

Som*_*ude 6

这只是关于嵌套。HSM本质上是FSM,但每个状态又可以是单独的FSM。

例如,以游戏中的NPC为例。它具有多种状态:

  1. 步行至A点
  2. 等一下
  3. 步行至B点
  4. 等一下
  5. 从1继续
  6. 与电脑打架

这个FSM很简单,但是当NPC受到PC攻击时,所有状态都需要转换到状态6(与PC战斗)。这使FSM有点丑陋。因此,与其让有这种更简单的FSM:

  1. 走来走去
  2. 与电脑打架

这个FSM非常简单,只有两个过渡,而且很容易理解。然后,状态1的主要部分是辅助FSM:

  1. 步行至A点
  2. 等一下
  3. 步行至B点
  4. 等一下

如果发生与辅助FSM过渡不匹配的事件(例如PC攻击),则将您移至顶层FSM以匹配该事件并找到合适的过渡。

您可以以某种方式将其视为堆栈,较高级别的每个状态都可以推送新的较低级别的FSM。如果有一个与任何可能的过渡都不匹配的偶数,则弹出堆栈并返回一个级别。继续直到存在匹配的过渡为止。

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