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机制可以很方便的实现 保持按住按钮,系统会周期触发某个事件。
源码中分为以下几个部分: