有限状态机作用 按照游戏玩家对象设计基本上有以下状态:
Idle(bool): 待机 Move(bool): 移动 Run(bool): 冲刺 Attack(bool): 攻击 Jump(bool): 跳跃 按照简单代码处理, 如果玩家先 移动 再按下 冲刺 的情况, 这时候玩家应该需要做到的是 冲刺 覆盖掉 移动 状态, 而不是 移动 和 冲刺 同时 bool=true.
可以自己编写代码测试或者自己脑子模拟下以下情景:
假设玩家初期带有 移动 状态, 那么玩家移动状态追加 isMove 即可 但是后来玩家又多出个 冲刺 状态, 因为行为是和 移动 互斥必须编写代码判断处于状态中 再后来玩家有多个 飞行(fly) 状态, 又要覆盖编写 if|switch 状态判断切换逻辑 这里如果按照比较初级的游戏逻辑来处理判断代码:
// 判断玩家是否可以移动, 不允许玩家处于奔跑和飞行状态 if (!isRun && !isFly) { // 允许移动并切换, 其他UI逻辑代码略 isMove = true; } // 判断玩家是否可以奔跑, 不允许玩家处于飞行状态 if (!isFly) { // 允许奔跑 isRun = true; } // 其他诸如追加传送和闪现的追加行为状态判断 可以看到这里面的状态复杂度及其可怕, 特别判断自身状态情况完全耦合在一起纠缠不清; 而如果要定义这种抢占状态(唯一状态)并发的情况, 衍生出利用 有限状态机(FSM) 处理并发行为状态.