Распознать два скелета Kinect

1

Я делаю игру (понг) с помощью kinect, я могу распознать один скелет, и я могу сделать жесты, чтобы управлять левой палкой, но когда я пытаюсь играть с двумя игроками, не узнаю скелет другого игрока. Это то, что я делаю до сих пор:

private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.tracked(skel);
                            this.trackedLeft(skel);
                        }
                    }
                }
            }
        }

        public void tracked(Skeleton skeleton)
        {
            Joint jHandRight = skeleton.Joints[JointType.HandRight];
            Joint jHipCenter = skeleton.Joints[JointType.HipCenter];
            if ((jHipCenter.Position.Z - jHandRight.Position.Z) > 0.2)
            {
                //Consider hand raised in front of them
                //System.Diagnostics.Debug.WriteLine("Hand: Raised");
                //MessageBox.Show("POR FAVORRRRRRRR");
                //movement[0] = false;
                movement[0] = true;
                movement[1] = false;
            }
            else
            {
                //Hand is lowered by the users side
                //System.Diagnostics.Debug.WriteLine("Hand: Lowered");
                //MessageBox.Show("A SERRRRIIIIIOOOOOOOOOOOOOO");
                //movement[1] = false;
                movement[1] = true;
                movement[0] = false;
            }
        }

Кто-то может мне помочь.

  • 0
    Как вы различаете игрока 1 и 2?
  • 0
    в настоящее время я не могу отличить, я читал, что Kinect может распознать двух игроков ... может быть, дает идентификаторы, но не знаю, как это сделать
Теги:
kinect
kinect-interaction

1 ответ

1
Лучший ответ

Вам нужно различать скелет один и два. См. Обнаружение пользователя Kinect, как это сделать. Затем вы можете передать скелет для игрока один и два для двух разных методов. Я использую идентификатор игрока, потому что, если скелет потерян для кадра или два, их идентификатор остается тем же

int id1 = 0, id2 = 0;

... 

if (skeletons.Length != 0)
{
    foreach (Skeleton skel in skeletons)
    {
         if (skel.TrackingState == SkeletonTrackingState.Tracked)
         {
                if (skel.TrackingID == id1)
                    this.tracked(skel);
                else if (skel.TrackingID == id2)
                    this.trackedLeft(skel);
                else
                {
                     if (id1 != 0 && id2 == 0)
                         id2 = skel.TrackingID;
                     else if (id2 != 0 && id1 == 0)
                         id1 = skel.TrackingID;
                }
         }
     }
  }
  • 0
    Вы имели в виду, что оба идентификатора одинаковы?
  • 0
    @ Mason Нет, ха-ха, случайно испортил мой код ... Проверьте мои правки
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню