有限状态机的定义这里不再多说,参见:
http://baike.baidu.com/view/1270724.htm
我想着重记一点FSM作为游戏管理核心可能带来的好处。
引入
众所周知在事件驱动的地方使用脚本是最合适的扩展方式,比如RPG游戏和RTS游戏。但在ACT和FTG游戏中如果要描述一个有很多种动作的角色,简单的脚本语言就略显不足了。
这里FSM就可以发挥它的优势了,状态集来容纳一组同构的复杂数据,转换规则来定义物体对游戏世界的响应,即状态改变。从最早的初始状态到最后的若干可能的终结状态,只要这个物体存在,必然是处于某一状态之中。状态转换函数可以用二维表的形式储存在文件或者数据库中,对开发角色编辑器也提供了很大的方便。
如果有足够的时间,我们甚至可以使用GUI开发出直观的在窗口上拖放状态,链接转换指令和条件,非常直观的完成角色设计。指令(比如一个必杀的搓招指令)和外界事件(比如从空中落地的瞬间)实际上都是状态机的转换条件(trigger) 二者对于FSM是没有区别的,只是来源不同。
一个典型的实例M.U.G.E.N引擎从提供的界面上来看完全是基于FSM的思想设计的,一切的物件都是一组状态,包括物件的物理属性也都直接隶属于状态。当然这个古老的东西还是有很多看起来不那么合理优雅的地方,比如没有命名只有数字序号的状态让制作角色的时候阅读起来非常不便,经常要翻来覆去查找序号的意义。但是它整体的设计思路是十分清晰的:物理规则首先决定物体的运动,状态机通过在进出状态时改变物理属性来作用于角色或者物件,最终构成看起来一致也受控的世界体系。比如A击打B使得B受到击打trigger,转变为飞出状态。根据A的击打力度和角度,可以给B一个初速度,B在飞出状态时受控标志为关状态(被打飞了还能随便按一下方向站住?那就太假了吧)一直到落地,落地状态在时间到了的trigger影响下,角色跳起,恢复受控状态。这里飞出到落地的过程中FSM是不动的,完全是物理规则在起效,这进一步印证了FSM基于物理规则,通过改变物理属性的方式对角色施加影响的运作模式。
本文仅仅作整理思路,备忘之用,随项目进展会进一步配图配例完善。
以上。