2012-04-17 12 views
5

मैं एसडीके का उपयोग कर एक एप्लीकेशन बना रहा हूं, जिसमें मेरे पास केवल एक उपयोगकर्ता होना चाहिए और इसे लॉक करें ताकि अगर कोई और साथ आए, भले ही वह व्यक्ति किनेक्ट के नजदीक हो, तो एप्लिकेशन रखता है ट्रैक किए गए पहले कंकाल को ट्रैक करना।एक कंकाल में लॉक कैसे करें

MSDN लाइब्रेरी मुझे लगता है मैं Skeletom स्ट्रीम कक्षा इस्तेमाल कर सकते हैं पाया से:

संपत्ति: AppChoosesSkeletons = हो जाता है या एक बूलियन मान निर्धारित करता है कि आवेदन जो कंकाल को ट्रैक करने के लिए चुनता है कि क्या तय करता है।

विधि: SkeletonStream.ChooseSkeletons (Int32) = ट्रैक करने के लिए एक कंकाल चुनता है। सिंटेक्स: सार्वजनिक शून्य चुनेंस्कलेट्स (int ट्रैकिंगId1)

मैं प्रोग्रामिंग में बहुत अच्छा नहीं हूं और मैं सी # का उपयोग कर रहा हूं, मैंने कोड को कुछ लिखने के बारे में सोचा था, लेकिन यह कहता है कि मैं एक अवैध अभिव्यक्ति का उपयोग कर रहा हूं ।

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... 

समस्या sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton साथ है, यह int firstSkeleton cannot be used कहते हैं।
क्या कोई मेरी मदद कर सकता है? धन्यवाद!

+0

कृपया, मुझे बताओ, जहां और जब आपको लगता है कि त्रुटि मिलती है। – Likurg

+0

@ लिकुर्ग मैंने इसे एक अलग तरीके से लिखा है, यह सुनिश्चित नहीं है कि यह काम करेगा या नहीं, यदि यह सबसे अच्छा तरीका है 'स्केलेटन निकटतम स्केलेटन = (स्केलेटन में एस से जहां एस। ट्रेकिंगस्टेट == कंकालट्रैकिंगस्टेट। टैक्ड एंड एस। जेइंट्स [ज्वाइंट टाइप। हेड ].TrackingState == JointTrackingState.Tracked select s)। ऑर्डरबी (एस => एस। ट्रेकिंगआईडी)। फर्स्टऑर्डडिल्ट(); 'कोड से पहले मैंने पोस्ट किया था, समस्या' सेंसर के साथ थी। क्रेलेटनस्ट्रीम। चुनोस्केलेट्स (int firstkeleton); ' यह कहा गया कि पहले intkeleton का उपयोग नहीं किया जा सका। मुझे लगता है कि मेरा तर्क बिल्कुल सही नहीं है, कुछ याद आ रही है लेकिन मुझे यकीन नहीं है कि यह कैसे करें। आपके उत्तर के लिए धन्यवाद – Paola

+0

क्या आपने Skeletons 'TrackingID' का उपयोग करने का प्रयास किया है? शायद पहले ही ध्यान दें? –

उत्तर

3
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton); 

आप इस लाइन के साथ क्या हासिल करना चाहते हैं?

इमो अगर आप firstSkeleton कास्ट करने के लिए यह इस प्रकार लिख int चाहते हैं:

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

अगर आप डॉन 't यह डाली और बस देने के लिए और चर int चाहते हैं methid करने के लिए सिर्फ लिखने:

sensor.SkeletonStream.ChooseSkeletons(firstSkeleton); 
2

आप एक कंकाल को लॉक नहीं कर सकते हैं, लेकिन आप अपनी स्थिति के बावजूद उस कंकाल को चुन सकते हैं जिसे आप ट्रैक करना चाहते हैं। यह जटिल हो जाता है जब दोनों लोग किनेक्ट के क्षेत्र के दृश्य को छोड़ देते हैं।

AppChoosesSkeletons को सही पर सेट करके आप उस उपयोगकर्ता को चुनने में सक्षम हैं जिसे आप ट्रैक करना चाहते हैं। उपयोगकर्ता या उपयोगकर्ताओं को ट्रैक करने के लिए निर्दिष्ट करने के लिए, SkeletonStream.ChooseSkeletons विधि पर कॉल करें और एक या दो कंकालों की ट्रैकिंग आईडी पास करें जिन्हें आप ट्रैक करना चाहते हैं (या कोई पैरामीटर ट्रैक नहीं होने पर कोई पैरामीटर नहीं)।

कुछ इस तरह:

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 
     } 
    } 
    } 
संबंधित मुद्दे