有限状态机(finity state machine)

原创 2006年05月25日 15:13:00

       有限状态机简称FSM,FSM就是描述一个过程由有限个独立状态组成,这些状态可以互相迁移,直到最终离开这个过程.游戏就是一个FSM,因为游戏总是由一些状态组成,每个场景就是一个状态,然后游戏的整个过程就是不断在这些场景中切换,来推动游戏的进行.可以说游戏框架不只是FSM,但是FSM绝对是游戏框架的核心.

        前一段时间通过移植一款韩国游戏,我从中抽出了一个FSM框架,是BREW平台上的.虽然现在这个FSM还不是很完善,可是足以拿来学习用了. 下面的类图描述了这个框架的静态结构.

       从上图可以看出,AbstractState类是所有状态类的接口,所有状态只是通过接口类AbstractState访问,AbstractState类隐藏了所有具体状态的细节,对外呈现一致的接口.状态管理类StateManager包含一个本程序中所有状态的数组,和一个当前激活状态的引用,因为在程序生命周期的任何时候都只有一个状态,而通过AEEApplet来的所有请求和事件,都转交给StateManager类,而StateManager类有通过
一致接口将其交给当前状态去处理.通过这样一个框架,有效的减少了具体状态和程序入口主体的耦合性,利于扩展.

        状态转移是怎么样实现的呢?首先有一点就是只有每个具体状态知道当前是否要改变状态,所以当知道要改变的时候,当前状态就将设置一个标志,设置下一个状态的ID,而StateManager类,当每一个刷屏时钟到的时候都要检测当前状态的改变状态标志,然后再改变状态.这样改变状态就是比较简单,但是有些耦合性,就是到处都有AbstractState::ChangeState()被调用.你也可以采取另一种方式来做这件事,就是在这个框架中加一个消息队列,然后每当要改变状态时就发消息,然后StateManager每一帧都在消息队列里抓消息,这样好像比较强大啊,但是你发消息不是还要在具体状态类中发吗,所以说具体类和状态改变之间的耦合在这种情况下是无法避免的.有一种情况是可以避免的,就是实现知道状态转化顺序的时候,这时可以建立一个静态转换表,然后要查表转化来转化状态.要不就是状态是线性的,状态管理类可以做成一个堆栈,进入下一个状态就是压栈,退出一个状态就是出栈,可是这样只适用于线性状态转化.在游戏中线性状态转化的情况很少.

谁要源码可以联系我zhaoxj01@hotmail.com

有限状态机,boost::msm

一个简单的有限状态机如图所示: 状态机几个要素: 状态state、事件event、动作action。这个状态机有两个状态,State1状态,和结束状态, 在Event1发生时会触发action(...
  • GW569453350game
  • GW569453350game
  • 2015年08月04日 10:13
  • 4975

Boost状态机--中级篇

一个boost状态机的例子
  • for_tech
  • for_tech
  • 2016年04月11日 16:16
  • 3008

C++学习 Boost状态机说明statechart

1. 状态 对象在其生命周期内,所处于的运动和发展阶段。例如:人可以处于工作中这个状态,也可以处于娱乐中状态。 状态应该有上下文环境。例如:人处于工作中状态,要属于职业生涯状态而不能是退休状态,...
  • skdkjxy
  • skdkjxy
  • 2015年05月29日 10:03
  • 2564

Unity 有限状态机(Finite State Machine)的理解 与 实现简单的可插拔(Pluggable)AI脚本对象。

Unity 有限状态机(Finite State Machine)、状态模式的理解与实现坦克AI。 参考官方教程:Pluggable AI With Scriptable Objects G...
  • l773575310
  • l773575310
  • 2017年06月10日 22:20
  • 1006

js有限状态机javascript-state-machine

转自:https://www.npmjs.com/package/javascript-state-machine Javascript Finite State Machine (v2.4.0...
  • TianTangYouZui
  • TianTangYouZui
  • 2017年01月11日 14:49
  • 1640

Finite-State Modeling in Software Design 软件设计中的有限状态机建模方法

  • 2009年12月14日 15:53
  • 116KB
  • 下载

状态机模式代码生成器 Finite State Machine Compiler

  • 2010年10月21日 23:37
  • 169KB
  • 下载

状态机的编程-State Machine Coding Styles for Synthesis

  • 2009年04月10日 14:34
  • 121KB
  • 下载

QP State Machine Frameworksqpc_4.1.05 状态机

  • 2010年12月04日 18:05
  • 9.91MB
  • 下载

Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)

最近在读Hadoop#Yarn部分的源码,读到状态机那一部分的时候,感到enmu的用法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这样的文章,就赶紧翻译下来,涨涨姿势。 原文链接...
  • chen517611641
  • chen517611641
  • 2014年11月17日 12:41
  • 1344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有限状态机(finity state machine)
举报原因:
原因补充:

(最多只允许输入30个字)