2012-04-17 33 views
5

Tôi đang tạo một ứng dụng bằng SDK, trong đó tôi phải chỉ có một người dùng và khóa nó để nếu ai đó khác đi cùng, ngay cả khi người đó gần Kinect hơn, ứng dụng vẫn giữ theo dõi bộ xương đầu tiên mà nó theo dõi.Làm thế nào để khóa trong một bộ xương

Từ thư viện MSDN tôi thấy tôi có thể sử dụng Skeletom Suối Class:

tài sản: AppChoosesSkeletons = Gets hoặc thiết lập một giá trị Boolean xác định liệu các ứng dụng chọn mà bộ xương để theo dõi.

Phương pháp: SkeletonStream.ChooseSkeletons (Int32) = Chọn một bộ xương để theo dõi. Cú pháp: public void ChooseSkeletons (int trackingId1)

Tôi không giỏi lập trình và tôi đang sử dụng C#, tôi nghĩ viết một cái gì đó giống như mã xuống, nhưng nó nói rằng tôi đang sử dụng một biểu thức không hợp lệ .

SkeletonFrame SFrame = e.OpenSkeletonFrame(); 
if (SFrame == null) return; 

Skeleton[] Skeletons = new Skeleton[SFrame.SkeletonArrayLength]; 
SFrame.CopySkeletonDataTo(Skeletons); 

int firstSkeleton = Skeletons[0].TrackingId; 
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton); 

if (firstSkeleton == null) 
return; 

if (SkeletonTrackingState.Tracked == firstSkeleton.TrackingState) 
{ 
//body... 

Vấn đề là với sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton, nó cho biết int firstSkeleton cannot be used.
Ai đó có thể giúp tôi không? Cảm ơn!

+0

Xin vui lòng, cho tôi biết, ở đâu và khi bạn nhận được lỗi đó. – Likurg

+0

@Likurg Tôi đã viết nó theo một cách khác không chắc chắn nếu nó sẽ hoạt động hoặc nếu đó là cách tốt nhất 'Skeleton closestSkeleton = (từ s trong Bộ xương nơi s.TrackingState == SkeletonTrackingState.Tracked && s.Joints [JointType.Head ] .TrackingState == JointTrackingState.Tracked select s) .OrderBy (s => s.TrackingId). BeforeOrDefault(); 'Từ mã tôi đã đăng trước đó, vấn đề là với' sensor.SkeletonStream.ChooseSkeletons (int firstSkeleton); ' nó nói rằng int firstSkeleton không thể được sử dụng. Tôi nghĩ rằng logic của tôi không hoàn toàn đúng, có điều gì đó thiếu nhưng tôi không chắc chắn làm thế nào để làm điều đó. Cảm ơn câu trả lời ur – Paola

+0

Bạn đã thử sử dụng Bộ theo dõi 'TrackingID' chưa? Có lẽ chỉ chú ý đến cái đầu tiên? –

Trả lời

3
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton); 

Bạn muốn đạt được điều gì với dòng này?

Imo nếu bạn muốn cast firstSkeleton để int viết nó như thế này:

sensor.SkeletonStream.ChooseSkeletons((int) firstSkeleton); 

nếu bạn don `t muốn bỏ nó và chỉ để cho đi và int biến để methid chỉ cần viết:

sensor.SkeletonStream.ChooseSkeletons(firstSkeleton); 
2

Bạn không thể khóa bộ xương, nhưng bạn có thể chọn bộ xương mà bạn muốn theo dõi, bất kể vị trí của nó. Nó trở nên phức tạp khi cả hai người rời khỏi tầm nhìn của Kinect.

Bằng cách đặt AppChoosesSkeletons thành true, bạn có thể chọn người dùng mà bạn muốn theo dõi. Để chỉ định người dùng hoặc người dùng theo dõi, hãy gọi phương thức SkeletonStream.ChooseSkeletons và chuyển ID theo dõi của một hoặc hai bộ xương bạn muốn theo dõi (hoặc không có thông số nào nếu không có bộ xương nào được theo dõi).

Something như thế này:

private void ChooseSkeleton() 
    { 
    if (this.kinect != null && this.kinect.SkeletonStream != null) 
     { 
     if (!this.kinect.SkeletonStream.AppChoosesSkeletons) 
     { 
     this.kinect.SkeletonStream.AppChoosesSkeletons = true; // Ensure AppChoosesSkeletons is set 
     } 

     foreach (Skeleton skeleton in this.skeletonData.Where(s => s.TrackingState != SkeletonTrackingState.NotTracked)) 
     { 
     int ID { get.skeleton[1]}//Get ID here 
     } 

     if (ID = 0) 
     { 
     this.kinect.SkeletonStream.ChooseSkeletons(ID); // Track this skeleton 
     } 
    } 
    } 
Các vấn đề liên quan