← 全部概念
游戏系统 / 20
有限状态机
同一时刻只有一种状态
交互演示
交互演示 · 移动指针或点击画面,观察变化
有限状态机让角色始终只处于一种状态,并列明哪些事件会使其转入哪种状态。没有对应转换规则的事件会被忽略,比如演示中在半空按下攻击键。这样就能取代一堆可能同时为真的布尔值,例如 isJumping 和 isAttacking。
适用场景
当行为具有不同模式,且模式之间的转换规则明确时,可以使用状态机。清晰的转换表能让你更容易判断角色是否允许跳跃、攻击或受伤。
实现示例
不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。
next = transitions[currentState].get(event)
if next exists:
states[currentState].exit()
currentState = next
states[currentState].enter()常见错误
不要把重要的状态转换隐藏在无关的标记里。如果移动状态与武器状态彼此独立,应使用分开的状态机或层级结构,而不是枚举所有可能的组合。
内容原作 Nicolas Zullo · 中文整理与交互改编