他们去的时候没有跟踪两个骷髅

他们去的时候没有跟踪两个骷髅

本文介绍了他们去的时候没有跟踪两个骷髅。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 大家好,我有这个代码,它可以和两个人一起工作,但是当一个人或两个人都去,而且回来或其他人使用它时,kinect不再跟踪它们 使用(SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame())                 {                     if(skeletonFrameData!= null)                     {                         Skeleton [] allSkeletons = new Skeleton [skeletonFrameData.SkeletonArrayLength];                                                  skeletonFrameData.CopySkeletonDataTo(allSkeletons);                                                 ////////////////////////////////////////////////// /////////////////////////////////////////////                          if(!PlayerOneExists ||!PlayerTwoExists)                         {                             foreach(骷髅sd in allSkeletons)                             {                                 if(sd == null || sd.TrackingState!= Nui.SkeletonTrackingState.Tracked)                                 {                                    休息;                                 }¥b $ b                                if(!PlayerOneExists)                                 {                                     PlayerOneExists = true;                                     PlayerIdOne = sd.TrackingId;                                 }¥b $ b                               否则                                     if(!PlayerTwoExists)                                     {                                         PlayerTwoExists = true;                                         PlayerIdTwo = sd.TrackingId;                                     }                              }                          }                         ////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////  $ $                         if(PlayerOneExists)                         {                             var sd =(from s in inSkeletons,其中s.TrackingState == SkeletonTrackingState.Tracked&& s.TrackingId == PlayerIdOne select s).FirstOrDefault();                             if(sd!= null)                             {                                 PlayerIdOne = sd.TrackingId;                                                                                            var nuiv = sd.Joints [JointType.HandRight] .ScaleTo((int)ActualWidth,(int)ActualHeight,0.50f,0.30f).Position;                                 CursorPosition = new Point(nuiv.X,nuiv.Y);                                 Nui.Joint lh = sd.Joints [Nui.JointType.HandLeft];                                 Nui.Joint ls = sd.Joints [Nui.JointType.ShoulderLeft];                                 bool isup = lh.Position.Y> ls.Position.Y; $                                 if(isup!= _isPainting)                                 {                                     _isPainting = isup;                                     if(_isPainting)                                         MainWindow.Instance.StartPainting();                                    否则                                         MainWindow.Instance.StopPainting();                                                                      }¥b $ b                            }¥b $ b                           否则                             {                                 PlayerOneExists = false;                                                                  PlayerIdOne = 0;                             } $                             if(PlayerTwoExists)                             {                                 var dd =(来自所有骨架中的s,其中s.TrackingState == SkeletonTrackingState.Tracked&& s.TrackingId == PlayerIdTwo select s).FirstOrDefault();                                 if(dd!= null)                                 { $                                     PlayerIdTwo = dd.TrackingId;                                                                          var nuiv = dd.Joints [JointType.HandRight] .ScaleTo((int)ActualWidth,(int)ActualHeight,0.50f,0.30f).Position;                                     CursorPosition2 =新点(nuiv.X,nuiv.Y);                                                                          Nui.Joint lq = dd.Joints [Nui.JointType.HandLeft];                                     Nui.Joint le = dd.Joints [Nui.JointType.ShoulderLeft];                                     bool isup = lq.Position.Y> le.Position.Y; $                                     if(isup!= _isPainting)                                     {                                         _isPainting = isup;                                         if(_isPainting)                                             MainWindow.Instance.StartPainting();                                        否则                                             MainWindow.Instance.StopPainting();                                     } $                                 }¥b $ b                            }¥b $ b                           否则                             {                                 PlayerTwoExists = false;                                                                                                   PlayerIdTwo = 0;                             }¥b $ b                        } b $ b 谢谢,抱歉我的英文不好解决方案 我想我看到你可以做出一些可能对某些错误情况有帮助的改变: if(!PlayerOneExists&& PlayerIdTwo!= sd.TrackingId)                                 {                                     PlayerOneExists = true;                                     PlayerIdOne = sd.TrackingId;                                 }                                否则                                     if(!PlayerTwoExists&& PlayerIdOne!= sd.TrackingId)                                     {                                         PlayerTwoExists = true;                                         PlayerIdTwo = sd.TrackingId;                                     }  这将阻止同一玩家被跟踪为玩家1和玩家二。  希望能给你一条线索。 Hi everyone, i have this code, it´s work with two people, but when one person or both go, and the come back or someone else use it, kinect does´t track them againusing (SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame())                {                    if (skeletonFrameData != null)                    {                        Skeleton[] allSkeletons = new Skeleton[skeletonFrameData.SkeletonArrayLength];                                                skeletonFrameData.CopySkeletonDataTo(allSkeletons);                                               ///////////////////////////////////////////////////////////////////////////////////////////////                         if (!PlayerOneExists || !PlayerTwoExists)                        {                            foreach (Skeleton sd in allSkeletons)                            {                                if (sd == null || sd.TrackingState != Nui.SkeletonTrackingState.Tracked)                                {                                    break;                                }                                if (!PlayerOneExists)                                {                                    PlayerOneExists = true;                                    PlayerIdOne = sd.TrackingId;                                }                                else                                    if (!PlayerTwoExists)                                    {                                        PlayerTwoExists = true;                                        PlayerIdTwo = sd.TrackingId;                                    }                              }                         }                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////                         if (PlayerOneExists)                        {                            var sd = (from s in allSkeletons where s.TrackingState == SkeletonTrackingState.Tracked && s.TrackingId == PlayerIdOne select s).FirstOrDefault();                            if (sd != null)                            {                                PlayerIdOne = sd.TrackingId;                                                                                         var nuiv = sd.Joints[JointType.HandRight].ScaleTo((int)ActualWidth, (int)ActualHeight, 0.50f, 0.30f).Position;                                CursorPosition = new Point(nuiv.X, nuiv.Y);                                Nui.Joint lh = sd.Joints[Nui.JointType.HandLeft];                                Nui.Joint ls = sd.Joints[Nui.JointType.ShoulderLeft];                                bool isup = lh.Position.Y > ls.Position.Y;                                if (isup != _isPainting)                                {                                    _isPainting = isup;                                    if (_isPainting)                                        MainWindow.Instance.StartPainting();                                    else                                        MainWindow.Instance.StopPainting();                                                                    }                            }                            else                            {                                PlayerOneExists = false;                                                                PlayerIdOne = 0;                            }                            if (PlayerTwoExists)                            {                                var dd = (from s in allSkeletons where s.TrackingState == SkeletonTrackingState.Tracked && s.TrackingId == PlayerIdTwo select s).FirstOrDefault();                                if (dd != null)                                {                                    PlayerIdTwo = dd.TrackingId;                                                                        var nuiv = dd.Joints[JointType.HandRight].ScaleTo((int)ActualWidth, (int)ActualHeight, 0.50f, 0.30f).Position;                                    CursorPosition2 = new Point(nuiv.X, nuiv.Y);                                                                        Nui.Joint lq = dd.Joints[Nui.JointType.HandLeft];                                    Nui.Joint le = dd.Joints[Nui.JointType.ShoulderLeft];                                    bool isup = lq.Position.Y > le.Position.Y;                                    if (isup != _isPainting)                                    {                                        _isPainting = isup;                                        if (_isPainting)                                            MainWindow.Instance.StartPainting();                                        else                                            MainWindow.Instance.StopPainting();                                    }                                }                            }                            else                            {                                PlayerTwoExists = false;                                                                                                PlayerIdTwo = 0;                            }                        }Thanks, and sorry for my bad english 解决方案 I think I see one change that you can make that might help with some error cases: if (!PlayerOneExists && PlayerIdTwo != sd.TrackingId)                                {                                    PlayerOneExists = true;                                    PlayerIdOne = sd.TrackingId;                                }                                else                                    if (!PlayerTwoExists && PlayerIdOne != sd.TrackingId)                                    {                                        PlayerTwoExists = true;                                        PlayerIdTwo = sd.TrackingId;                                    }  This will prevent the same player from being tracked as both player one and player two.  Hope that gives you a clue to follow. 这篇关于他们去的时候没有跟踪两个骷髅。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-12 23:04