分层有限状态机的C++实现
来源:互联网 发布:电商与淘宝有什么区别 编辑:程序博客网 时间:2024/06/05 00:19
为了方便我的游戏开发,写了这么一个通用的分层有限状态机。希望在其稳定以后,可以作为一个组件加入到我的游戏引擎当中。
目前使用了std::function来调用回调函数,在未来可能会用委托机制代替。
第一版仅仅是为了快速开发出来使用,在未来会对性能和易用性改进。
代码下载:http://download.csdn.net/detail/vvsxr/8060377
使用方法:
HFSM fsm;fsm.addState(1);fsm.addState(2);fsm.addState(3);fsm.addEvent(1, 1, 2);fsm.addEvent(2, 2, 3, HFSM::PUSH);fsm.addEvent(3, 3, 2, HFSM::POP);fsm.setAfterEventCallBack(1, [](const HFSM::EventParameters ¶ms){printf("event %d happened\n", params.event); });fsm.setAfterEventCallBack(2, [](const HFSM::EventParameters ¶ms){printf("event %d happened\n", params.event); });fsm.setAfterEventCallBack(3, [](const HFSM::EventParameters ¶ms){printf("event %d happened\n", params.event); });fsm.setEnterStateCallBack(1, [](const HFSM::EventParameters ¶ms){printf("enter state %d\n", params.to); });fsm.setEnterStateCallBack(2, [](const HFSM::EventParameters ¶ms){printf("enter state %d\n", params.to); });fsm.setEnterStateCallBack(3, [](const HFSM::EventParameters ¶ms){printf("enter state %d\n", params.to); });fsm.setInit(1);fsm.setFinish(2);fsm.startup();fsm.doEvent(1);fsm.doEvent(2, HFSM::PUSH);HFSM::EventParameters params;fsm.doEvent(3, params, HFSM::SET);
流程就是1.创建状态机,2.加入状态,3.加入事件,4.加入回调函数,5.设置启动状态,6.启动状态机
注意:
1.不能加入状态STATE_NULL,是在hfsm.h里定义的,表示“无”状态。
2.不能加入事件EVENT_STARTUP,是在hfsm.h里定义的,表示状态机的“启动”事件。这两个常量被定义为不常用的数,你可以自己修改,现在它们的值为-9999999
3.addEvent有4个参数,分别为:事件ID,出发状态ID,到达状态ID,状态迁移类型。状态必须是已存在的状态,也就是说,最好先把所有状态都加入,再加入事件。状态迁移类型表示事件发生,新的状态是入栈还是直接代替原来的状态,有四个值:DEFAULT, SET, PUSH, POP,其中DEFAULT表示默认,在这里相当于SET。
4.set......CallBack 是设置事件发生前后,状态进出时调用的回调函数,第一个参数是ID,第二个参数是std:;function型的。这几个函数未来可能会改变,以支持委托机制。
5.setInit setFinish 是设置状态机的初始状态和最终状态
6.状态机必须调用startup() 函数才会启动,从“无”状态进入初始状态。
7.doEvent() 事件有三个参数,第一个是事件ID,第二个是事件参数,可以不写,如果需要给事件的发生附加参数,可以继承HFSM::EventParameters 类,然后再创建个实例作为参数。第三个参数表示状态迁移类型,解释见注意3,该参数如果不写,或设为DEFAULT,会使用定义这个事件时设置的迁移类型。
- 分层有限状态机的C++实现
- C语言有限状态机的实现
- 一种有限状态机的C语言实现
- 整理:一种有限状态机的C语言实现
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- c语言实现有限状态机
- c/c++ 有限状态机实现
- C语言实现有限状态机
- C语言实现有限状态机
- 有限状态机C语言实现
- 有限状态机的实现
- 有限状态机的实现
- 有限状态机的一个实现
- 有限状态机的实现
- lua实现的有限状态机
- C++模板学习
- 约瑟夫环问题
- Guava缓存器源码分析——CacheBuilder
- fedora19下配置samba服务器与windows7共享文件夹
- 目标黑马,我的自学之路:第十六章 基础测试实例
- 分层有限状态机的C++实现
- HDU—— 4438 Hunters
- UVA10192
- ADO简单操作 DataSet
- [android基础知识] 之十四: adb shell命令整理帖
- 【解读】pmp认证
- 深入分析java中的中文编码问题
- Unity3d内存管理与优化
- 使用drawableLeft图片不居中问题