跟诸子学游戏 有限状态机FSM

有限状态机

 http://wiki.unity3d.com/index.php/Finite_State_Machine      

是指在不容阶段,会呈现不同的功能,这些状态是有限的,不重叠的,这样的系统在某一时刻一定会处于其所有状态的其中一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态. 根据状态调用函数,map保存状态(key)和函数(value) 状态可以有子状态,状态里面包含tasks任务.

有限状态机包含两个部分①状态集(FSMState),状态一般使用枚举enum或者字符串string,子类继承状态集抽象类(FSMState),然后添加各种状态. ②状态管理机(FSMSystem),管理状态集子类的状态,基本可以称为:增删改查取.通过这些组合进行一系列复杂逻辑的操作,达到逻辑清晰,代码复用率高的效果.

5个元素:    ①状态:当前处于什么状态.②事件:当前状态调用相同的函数方法,产出不同的功能.③条件:根据什么条件转换其他状态.④动作:条件触发状态,状态触发动作.⑤迁移:状态切换也叫做状态迁移,在update里面一直调用当前状态对应的方法,.

状态条件关系图

简单方式使用switch case 来开发,开发简单,缺点太多,不做讨论;

一般分为3个类 ,例如:

FSMState 状态基类,使用枚举记录有几种状态;使用枚举记录状态转换的条件;记录条件所对应的状态(map),增加/删除条件所对应的状态;根据当前条件得到状态;虚方法(可写可不写),例如:在进入这个状态之前做什么动作,在进入这个状态之后做什么动作;抽象方法(必须写,因为这些个事件是在逻辑帧update里面进行更新的),例如:发生什么动作/做什么事件,判断当前物体是否要进入另一个状态;

xxxState 状态子类,继承自FSMState ,初始化一些数据,实现抽象方法等,程序框架搭好之后,主要在这个地方进行.

FSMManager:状态机管理类,记录当前状态ID,记录当前状态所对应的条件.搭好状态对象执行的方法,切换状态的方法.

实际物体上面去调用FSMManager中搭好框架的方法.

例如代码:

实际物体上面执行的方法:

挂载到物体上面
FSMManager对象
状态基类
状态子类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容