我自己做后端开发。但看看 gamedev 就变得很有趣。我看到开发人员经常使用FSM模式。这种模式的概念我很清楚,但有一点我仍然无法理解。 FSM 的一个重要点是只有一个状态可以是活动的。在我遇到的所有材料中,给出了一个简单的状态示例。例如,玩家可以处于空闲状态(IdleState)、跳跃状态(JumpState)和奔跑状态(RunState)。这里一切都很清楚。如果我们在玩家攻击时添加一个状态(AttackState)会怎么样?玩家可以跳跃攻击,也可以奔跑攻击。但多个州不能同时活跃。请告诉我在这种情况下正确的做法是什么?如果可能的话,我很高兴能提供有关密克罗尼西亚联邦的解释材料的链接,最好是俄语的。
UPD:或者对于这种情况,您是否需要有多个单独的 FSM?例如,玩家可以拥有一个包含状态(空闲、运行、跳跃)的 MovementFSM,以及一个包含诸如(攻击、防御)等状态的 CombatFSM?
FSM 既涉及原子又涉及复杂的整体。游戏正在运行,游戏被冻结——例如,有两种状态。
重要(https://ru.wikipedia.org/wiki/Finite_automatic)——这是一台具有 N 个有限状态的机器(跑步、咀嚼三明治、鞋带解开、穿着运动衫、思考 GOS),并且不是一种状态(运行或站立)的第 N 个数字。
即使是一个简单的例子,当玩家同时攻击、恢复生命值、恢复法力值、沿X轴移动、沿Y轴移动时,肯定会有几个分层的状态(看看一个动作如何划分)分成 2 个属性?)同时在不同的子系统和属性
N上具有不同的状态。MO从前面来看,类比更简单——每个程序都处于某种状态并在状态之间切换。每个条件都可以根据您的喜好复杂程度。
关于您的示例,这很可能是当前操作(来自玩家的命令)的 FSM 以及状态更改时它们(并非全部)影响的属性集。玩家说要跑 - 他们旋转玩家,设置速度矢量,并选择所需的动画(可能使用前一个动画的插值)。某些系统(例如耐力)会查看状态并停止操作(或在状态发生变化时主动关闭)。在 n 个刻度之后,玩家说要攻击 - 他们决定如何处理速度矢量(在 n 个刻度内平滑地淡入 0 或根据攻击类型立即重置?),更改动画(可能使用前一个动画的插值) ),开始检查 NPC 碰撞箱的损坏情况。
从简单开始 - 然后让它变得更复杂。