YuYuYouEr工作室

AREA OF 雨雨油儿 ~~ 承接体感互动软件、游戏定制开发 ~~

Entries for the ‘qfFSM有限自动机’ Category

Kinect超时按钮实现 – 基于qfFSM有限状态自动机类库

qfFSM有限状态自动机类库目前拥有C++、C#、Java、JavaScript版本,对于同一份UML状态图,不同语言均可用qfFSM来实现。

本文使用JavaScript版本在浏览器中实现一个超时按钮,为方便测试,我使用鼠标指针来模拟Kinect关节,接入Kinect数据后,只需将手部关节坐标替换进来即可。

首先看超时按钮的UML状态图:

主状态机中有STATE_Normal、STATE_PointIn、STATE_PointOut三个状态,其中后面两个作为子状态机存在,他们内部分别含有3个状态:激活/非激活开始状态、正在激活/非激活状态、已激活/非激活状态。

设计 正在激活/非激活状态 是为了配合相应动画机制,如经典的按钮注水、按钮转满一周等计时方式。

事件方面支持UserLeave、PointIn、PointOut,以及MultiActive(多次连续激活)。

MultiActive机制可以很方便的实现 保持按住按钮,系统会周期触发某个事件。

源码中分为以下几个部分:

[Read the rest of this entry...]

有限状态自动机类库 – qfFSM

给自己开发了一套有限状态自动机类库,满足基本的状态转移需求,有需要的朋友拿去玩吧。

boost库中自动机还是比较强大的,不过确实比较大,而且我的项目要求可在运行时修改状态机的配置。

 

源码下载地址:

qfFSM 百度网盘

C++版本:qfFSM_for_cpp_v1.2.zip

Java版本:qfFSM_for_java_v1.2.zip

JavaScript版本:qfFSM_for_javascript_v1.2.zip

C#版本:qfFSM_for_csharp_v1.2.zip

Unity3D(C#)版本:qfFSM_for_unity3d_csharp_v1.2.zip

压缩包内含有一个简单的 StopWatch例程,UML状态图如下:

类库非常小,文件列表及说明如下:

qfState.h/.cpp:状态

qfStateMachine.h/.cpp:状态机,由状态、事件、转移规则组成,继承自qfState,可作为另一个状态机的子状态

qfEvent.h:事件,状态机的激励

PropertyBag.h:属性包,每个qfEvent都有一个属性包

qfFSM.h/.cpp:qfFsmLogic类,对qfStateMachine进行封装,提供一个大粒度状态机基类,状态机开始、停止、重置,状态机子状态管理。

================================

[Read the rest of this entry...]

  

京ICP备09080331号