2014-06-19 2 views
1

kinect를 사용하여 게임을 만들었습니다. 하나의 스켈레톤을 인식 할 수 있고 왼쪽 스틱을 제어하기 위해 제스처를 만들 수 있습니다.하지만 두 명의 플레이어와 함께 플레이하려고하면 스켈레톤을 인식하지 못합니다. 다른 플레이어의 이것은 지금까지 내가 한 일입니다.두개의 스켈레톤 인식하기 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가 두 명의 플레이어를 인식 할 수 있다고 읽었습니다. 어쩌면 id를 주지만 어떻게 해야할지 모른다는 것입니다. – seal

답변

1

스켈레톤 1과 2를 구별 할 방법이 필요합니다. 이를 수행하는 방법은 Kinect user Detection을 참조하십시오. 그런 다음 플레이어 1과 2의 스켈레톤을 두 가지 방법으로 전달할 수 있습니다. 프레임 하나 또는 두 개의 스켈레톤이 손실되면 ID가 동일하게 유지되므로 플레이어 ID를 사용합니다.

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

두 ID가 같은 것을 의미합니까? – mason

+0

@mason 하하가 우연히 내 코드를 엉망으로 만들지 않았습니다 ... 내 편집을 확인하십시오 –

+0

질문이있는 경우이 코드는이 코드를 입력합니다. if (id1! = 0 && id2 == 0) id2 = skel.TrackingID; else if (id2! = 0 && id1 == 0) id1 = skel.TrackingID;'시도해 보니 결코 통과하지 못했습니다. 뭔가 빠졌습니까? – seal

관련 문제