[游戏开发]角色状态机

     最近在重构客户端的时候,把角色行为控制由并行状态机重新改为最简单的状态机,还是觉得并行太复杂了。
    先介绍下并行状态机, 然后说明并行的缺点。
    1. 在《大型多人在线游戏开发》一书中详细介绍了并行状态机:”使用并行状态机来创建可信的角色“。 大致可用下面两张图描述。

     图一、

    
    图二、

   

    2. 并行看上去很好,但我实际应用下来也有几个问题:
        a. 并行不好调试,如果各层之间的状态切换会有意想不到的bug;
        b.”跨层阻止“之后,”状态切换“跟”状态Unblock“有先后顺序问题。比如
                 CurrentMoveState.UnBlock;
                 SetPoseState(RunState);
                 这两句话如果先后次序换下,结果完全不一样。这就要求编码的时候要非常小心,但这点会把人弄晕:(
        c. 不好做日志,万一程序出错,很难根据上下文分析错误原因。

    不用并行,采用单一状态控制角色行为,编码比较简单、容易调试跟踪、日志可分析,但问题就是状态会非常多(主要是组合引起的),比如说有RunState、WalkState,如果这时候来一个新的AttackState,那么多出RunAttackState、WalkAttackState。


 

posted on 2008-09-21 22:23  winsonchen  阅读(3121)  评论(4编辑  收藏  举报

导航