Riv*_*asa 3 c++ implementation fsm hierarchical
因此,我尝试使用C ++进行游戏,并且阅读了很多有关有限状态机(FSM)和分层状态机(HSM)的文章。但是,我将承认我阅读的大部分内容都有些密集且难以理解,因此我希望有人可以为我简化它。这是FSM还是HSM?
根据我想清除的内容:
HSM与普通的FSM有何不同?为什么对游戏更好?
关于C ++,如何按照状态模式实现基本的HSM?(我可能对此不正确/使用错误的单词。)
您如何精确地处理过渡?我经常听到的on_exit和on_enter方法是什么?
我整个游戏需要一个HSM吗?(例如处理所有敌人,玩家动作,游戏菜单)还是我使用多个HSM?
在实现玩家实体时,它们是否都是实体状态的子集?
最后,如果有人可以提供一些伪代码来帮助可视化这些问题,我将不胜感激。
这只是关于嵌套。HSM本质上是FSM,但每个状态又可以是单独的FSM。
例如,以游戏中的NPC为例。它具有多种状态:
这个FSM很简单,但是当NPC受到PC攻击时,所有状态都需要转换到状态6(与PC战斗)。这使FSM有点丑陋。因此,与其让有这种更简单的FSM:
这个FSM非常简单,只有两个过渡,而且很容易理解。然后,状态1的主要部分是辅助FSM:
如果发生与辅助FSM过渡不匹配的事件(例如PC攻击),则将您移至顶层FSM以匹配该事件并找到合适的过渡。
您可以以某种方式将其视为堆栈,较高级别的每个状态都可以推送新的较低级别的FSM。如果有一个与任何可能的过渡都不匹配的偶数,则弹出堆栈并返回一个级别。继续直到存在匹配的过渡为止。
简而言之,这是简化FSM的一种方法。