YuYuYouEr工作室

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

Entries Tagged ‘Button’

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...]

kinect体感交互 – 按钮激活 – 超时检测

整理一下最近kinect交互项目中按钮激活时用到的状态图,希望对大家有帮助。

kinect体感交互 - 按钮激活 - 超时检测

kinect体感交互 - 按钮激活 - 超时检测

上图为Button对于某个kinect骨骼节点的响应,处理进入、离开、激活。

状态列表:

State_Normal: 常规状态
State_PointOut: 点离开状态
State_PointIn: 点进入
State_CountDown_start: 倒计时开始
State_Active: 激活
State_DeActive: 非激活

事件列表:

无名称的事件弧为AutoTransferEvent,实现状态间的自动转移;
event_PointIn: 点进入
event_PointOut: 点离开
event_UserLeave: 用户离开
event_CountDown_end: 倒计时结束
event_enableMultiActive: 允许连续多次激活

最近在项目中使用与kinect手部节点交互的按钮,需要处理手部进入、离开按钮范围,进入后0.5s达到激活态,激活后若手部节点没有离开,则允许连续激活。

在我的项目中Button内部有StateMachine实现,同时持有一个EventListenerManager,允许其他对象注册为EventListener,State_Active/State_DeActive状态会有事件产生。

如果需要实现激活Loading动画,如常见的转满一周或者类似注水的效果,可以在State_CountDown_start状态增加事件通知。

 

  

京ICP备09080331号