// by jiabin
namespace xnaGame
{
//实现交互端接口的类
public class InteractionClient : IInteractionClient
{ //实现得到交互对象
public InteractionInfo GetInteractionInfoAtLocation(int skeletonTrackingId, InteractionHandType handType, double x, double y){
return new InteractionInfo{
IsPressTarget = true,
IsGripTarget = true,
};
}
}
class reInteraction {
public Vector2 rection;
public string HandType; //手的类型
public string action; //是否按下
}
class Interaction : Object2D
{
private readonly SkeletonPointMap mapMethod;
private DepthImagePixel[] depthData; //深度数据!!
private UserInfo[] UserInfos = null;
InteractionClient ic;
InteractionStream its;
public reInteraction outInteractionyou;//右
public reInteraction outInteractionzuo;//左
public Skeleton[] skeletonData;
string action = null;
public Interaction(Game game,SkeletonPointMap map)
: base(game)
{
this.mapMethod = map;
}
public Boolean LoadInitialization(){
if (this.Chooser==null || null == this.Chooser.Sensor ||
false == this.Chooser.Sensor.IsRunning ||
KinectStatus.Connected != this.Chooser.Sensor.Status)
{
return false;
}
else {
ic = new InteractionClient();
its = new InteractionStream(this.Chooser.Sensor, ic);
outInteractionyou = new reInteraction();
outInteractionyou.rection = Vector2.Zero;
outInteractionzuo = new reInteraction();
outInteractionzuo.rection = Vector2.Zero;
return true;
}
}
public reInteraction actioncType(reInteraction reget, InteractionHandPointer handPointer)
{
//if (handPointer.X != 0)
//{
// reget.rection.X = (float)handPointer.X;
// reget.rection.Y = (float)handPointer.Y;
//}
switch (handPointer.HandEventType)
{
case InteractionHandEventType.Grip:
reget.action = "握住";
break;
case InteractionHandEventType.GripRelease:
reget.action = "放开";
break;
}
return reget;
}
public Boolean up() {
using (var framedepth = this.Chooser.Sensor.DepthStream.OpenNextFrame(0))
{
// Sometimes we get a null frame back if no data is ready
if (null == framedepth)
{
return false;
}
// Reallocate values if necessary
if (null == this.depthData || this.depthData.Length != framedepth.PixelDataLength)
{
this.depthData = new DepthImagePixel[framedepth.PixelDataLength];
}
framedepth.CopyDepthImagePixelDataTo(this.depthData);
its.ProcessDepth(this.depthData, framedepth.Timestamp);
}
using (SkeletonFrame skeletonFrame = this.Chooser.Sensor.SkeletonStream.OpenNextFrame(0))
{
if (skeletonFrame != null)
{
skeletonData = new Skeleton[this.Chooser.Sensor.SkeletonStream.FrameSkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletonData);
//把骨骼数据传给交互对象
its.ProcessSkeleton(skeletonData, this.Chooser.Sensor.AccelerometerGetCurrentReading(), skeletonFrame.Timestamp);
}
}
if (null == skeletonData || null == this.mapMethod)
{
return false;
}
foreach (var skeleton in skeletonData)
{
if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
{
Joint j = skeleton.Joints[JointType.HandRight];
if (j.Position.X != 0)
{
outInteractionyou.rection = this.mapMethod(j.Position);
}
Joint y = skeleton.Joints[JointType.HandLeft];
if (y.Position.X != 0)
{
outInteractionzuo.rection = this.mapMethod(y.Position);
}
}
}
InteractionFrame frame = its.OpenNextFrame(0);
if (frame != null)
{
if (this.UserInfos == null)
{
//获得用户信息
this.UserInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
}
frame.CopyInteractionDataTo(this.UserInfos);
// reInteraction yigefanhuizhi = new reInteraction();
// UserInfo userInfo = this.UserInfos[0];
foreach (UserInfo userInfo in this.UserInfos)
{
foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
{
switch (handPointer.HandType)
{
// case InteractionHandType.None:
// outInteraction.HandType = "无";
// outInteraction = actioncType(outInteraction, handPointer);
// break;
case InteractionHandType.Left:
outInteractionzuo.HandType = "左";
outInteractionzuo = actioncType(outInteractionzuo, handPointer);
break;
case InteractionHandType.Right:
outInteractionyou.HandType = "右";
outInteractionyou = actioncType(outInteractionyou, handPointer);
break;
}
}
}
return true;
}
return false;
}
}
}
namespace xnaGame
{
//实现交互端接口的类
public class InteractionClient : IInteractionClient
{ //实现得到交互对象
public InteractionInfo GetInteractionInfoAtLocation(int skeletonTrackingId, InteractionHandType handType, double x, double y){
return new InteractionInfo{
IsPressTarget = true,
IsGripTarget = true,
};
}
}
class reInteraction {
public Vector2 rection;
public string HandType; //手的类型
public string action; //是否按下
}
class Interaction : Object2D
{
private readonly SkeletonPointMap mapMethod;
private DepthImagePixel[] depthData; //深度数据!!
private UserInfo[] UserInfos = null;
InteractionClient ic;
InteractionStream its;
public reInteraction outInteractionyou;//右
public reInteraction outInteractionzuo;//左
public Skeleton[] skeletonData;
string action = null;
public Interaction(Game game,SkeletonPointMap map)
: base(game)
{
this.mapMethod = map;
}
public Boolean LoadInitialization(){
if (this.Chooser==null || null == this.Chooser.Sensor ||
false == this.Chooser.Sensor.IsRunning ||
KinectStatus.Connected != this.Chooser.Sensor.Status)
{
return false;
}
else {
ic = new InteractionClient();
its = new InteractionStream(this.Chooser.Sensor, ic);
outInteractionyou = new reInteraction();
outInteractionyou.rection = Vector2.Zero;
outInteractionzuo = new reInteraction();
outInteractionzuo.rection = Vector2.Zero;
return true;
}
}
public reInteraction actioncType(reInteraction reget, InteractionHandPointer handPointer)
{
//if (handPointer.X != 0)
//{
// reget.rection.X = (float)handPointer.X;
// reget.rection.Y = (float)handPointer.Y;
//}
switch (handPointer.HandEventType)
{
case InteractionHandEventType.Grip:
reget.action = "握住";
break;
case InteractionHandEventType.GripRelease:
reget.action = "放开";
break;
}
return reget;
}
public Boolean up() {
using (var framedepth = this.Chooser.Sensor.DepthStream.OpenNextFrame(0))
{
// Sometimes we get a null frame back if no data is ready
if (null == framedepth)
{
return false;
}
// Reallocate values if necessary
if (null == this.depthData || this.depthData.Length != framedepth.PixelDataLength)
{
this.depthData = new DepthImagePixel[framedepth.PixelDataLength];
}
framedepth.CopyDepthImagePixelDataTo(this.depthData);
its.ProcessDepth(this.depthData, framedepth.Timestamp);
}
using (SkeletonFrame skeletonFrame = this.Chooser.Sensor.SkeletonStream.OpenNextFrame(0))
{
if (skeletonFrame != null)
{
skeletonData = new Skeleton[this.Chooser.Sensor.SkeletonStream.FrameSkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletonData);
//把骨骼数据传给交互对象
its.ProcessSkeleton(skeletonData, this.Chooser.Sensor.AccelerometerGetCurrentReading(), skeletonFrame.Timestamp);
}
}
if (null == skeletonData || null == this.mapMethod)
{
return false;
}
foreach (var skeleton in skeletonData)
{
if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
{
Joint j = skeleton.Joints[JointType.HandRight];
if (j.Position.X != 0)
{
outInteractionyou.rection = this.mapMethod(j.Position);
}
Joint y = skeleton.Joints[JointType.HandLeft];
if (y.Position.X != 0)
{
outInteractionzuo.rection = this.mapMethod(y.Position);
}
}
}
InteractionFrame frame = its.OpenNextFrame(0);
if (frame != null)
{
if (this.UserInfos == null)
{
//获得用户信息
this.UserInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
}
frame.CopyInteractionDataTo(this.UserInfos);
// reInteraction yigefanhuizhi = new reInteraction();
// UserInfo userInfo = this.UserInfos[0];
foreach (UserInfo userInfo in this.UserInfos)
{
foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
{
switch (handPointer.HandType)
{
// case InteractionHandType.None:
// outInteraction.HandType = "无";
// outInteraction = actioncType(outInteraction, handPointer);
// break;
case InteractionHandType.Left:
outInteractionzuo.HandType = "左";
outInteractionzuo = actioncType(outInteractionzuo, handPointer);
break;
case InteractionHandType.Right:
outInteractionyou.HandType = "右";
outInteractionyou = actioncType(outInteractionyou, handPointer);
break;
}
}
}
return true;
}
return false;
}
}
}