2012-04-17 12 views
5

SDKを使用してアプリケーションを作成しています.1人のユーザーしかいないため、他のユーザーがいる場合は、そのユーザーがKinectに近い場合でもアプリケーションが保持します追跡した最初のスケルトンを追跡します。私はSkeletomストリームクラスを使用することができたのMSDNライブラリから1つのスケルトンをロックする方法

プロパティ:AppChoosesSkeletonsの=は、アプリケーションが追跡するために、どのスケルトンを選択したかどうかを決定するブール値を取得または設定します。

メソッド:SkeletonStream.ChooseSkeletons(Int32)=追跡する1つのスケルトンを選択します。 構文:public void ChooseSkeletons(int trackingId1)

私はプログラミングがよくなく、C#を使用していますが、コードのようなものを書くことを考えましたが、無効な式を使用しています。

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

@Likurg私は、それがうまくいくかどうか、あるいはそれが最善の方法であるかどうかわからない別の方法でそれを書いた。skeleton closestSkeleton =(スケルトンのsからs.TrackingState == SkeletonTrackingState.Tracked && s.Joints [JointType.Head ])。TrackingState == JointTrackingState.Tracked select s).OrderBy(s => s.TrackingId).FirstOrDefault(); '以前に投稿したコードから、問題は' sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton); int first skeletonは使えないと言っていました。私の論理はまあまあではないと思います。欠けているものがありますが、どうやってそれを行うのか分かりません。あなたの答えは – Paola

+0

です。スケルトン 'TrackingID'を使ってみましたか?おそらく最初のものに注意を払うだけでしょうか? –

答えて

3
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton); 

この行で何をしたいですか?芋

あなたはこのようにそれを書くintにfirstSkeletonをキャストする場合:あなたはそれをキャストすると、ちょうどちょうど書くmethidする変数を与えるとint型にしたい `tを場合

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

sensor.SkeletonStream.ChooseSkeletons(firstSkeleton); 
2

スケルトンをロックすることはできませんが、その位置に関係なく、追跡するスケルトンを選択できます。両方の人がKinectの視野を離れると複雑になります。

AppChoosesSkeletonsをtrueに設定すると、追跡するユーザーを選択できます。追跡するユーザーを指定するには、SkeletonStream.ChooseSkeletonsメソッドを呼び出して、追跡する1つまたは2つのスケルトンの追跡IDを渡します(または、追跡するスケルトンがない場合はパラメータが渡されません)。このような

何か:

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 
     } 
    } 
    } 
関連する問題