[游戏开发]角色状态机
最近在重构客户端的时候,把角色行为控制由并行状态机重新改为最简单的状态机,还是觉得并行太复杂了。
先介绍下并行状态机, 然后说明并行的缺点。
1. 在《大型多人在线游戏开发》一书中详细介绍了并行状态机:”使用并行状态机来创建可信的角色“。 大致可用下面两张图描述。
图一、
图二、
2. 并行看上去很好,但我实际应用下来也有几个问题:
a. 并行不好调试,如果各层之间的状态切换会有意想不到的bug;
b.”跨层阻止“之后,”状态切换“跟”状态Unblock“有先后顺序问题。比如
CurrentMoveState.UnBlock;
SetPoseState(RunState);
这两句话如果先后次序换下,结果完全不一样。这就要求编码的时候要非常小心,但这点会把人弄晕:(
c. 不好做日志,万一程序出错,很难根据上下文分析错误原因。
不用并行,采用单一状态控制角色行为,编码比较简单、容易调试跟踪、日志可分析,但问题就是状态会非常多(主要是组合引起的),比如说有RunState、WalkState,如果这时候来一个新的AttackState,那么多出RunAttackState、WalkAttackState。
posted on 2008-09-21 22:23 winsonchen 阅读(3123) 评论(4) 编辑 收藏 举报