跳到主要内容
← 全部概念
游戏系统 / 20

有限状态机

同一时刻只有一种状态

交互演示

交互演示 · 移动指针或点击画面,观察变化

有限状态机让角色始终只处于一种状态,并列明哪些事件会使其转入哪种状态。没有对应转换规则的事件会被忽略,比如演示中在半空按下攻击键。这样就能取代一堆可能同时为真的布尔值,例如 isJumping 和 isAttacking。

适用场景

当行为具有不同模式,且模式之间的转换规则明确时,可以使用状态机。清晰的转换表能让你更容易判断角色是否允许跳跃、攻击或受伤。

实现示例

不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。

next = transitions[currentState].get(event)
if next exists:
  states[currentState].exit()
  currentState = next
  states[currentState].enter()

常见错误

不要把重要的状态转换隐藏在无关的标记里。如果移动状态与武器状态彼此独立,应使用分开的状态机或层级结构,而不是枚举所有可能的组合。

内容原作 Nicolas Zullo · 中文整理与交互改编