本文介绍了他们去的时候没有跟踪两个骷髅。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 大家好,我有这个代码,它可以和两个人一起工作,但是当一个人或两个人都去,而且回来或其他人使用它时,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