Kinect 轮询方式下 握住 放开

// 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;  
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值