2012-05-12 6 views
8

が、私はちょうど(ShapeGameのような)2人用のゲームを作成しが、問題は選手の一人がゲームのシーンからレフトとき、私はゲームから左にその1(プレイヤー)を検出することができないです。のKinect SDKプレーヤー検出

は、ゲーム内の2台があると思います。最初に検出されたプレーヤー(player1と呼ぶ)は左手を使用し、player2は右手を使用します。 player1シーンを去ったとき、突然、player2は、左の車の制御を取り、player1がゲームに再加入する場合、player1は再び左車のコントロールを取り戻すとplayer2は、右の車を制御します。

int id = 0; 
foreach (SkeletonData data in skeletonFrame.Skeletons) 
{ 
    if (SkeletonTrackingState.Tracked == data.TrackingState) 
    { 
     // do some work 

     id++; 
    } 
} 

ことは、プログラムが最初に検出されたプレーヤーのためid = 0を与える第二のプレーヤーを検出し、1ため(player1それを呼び出す)(player2それを呼び出します)。プレーヤー2がゲームから離れて再び参加したときに問題はありません。再びid = 1が必要です。 player1がゲームからレフトとき、それはこの時点で最初に検出されたプレーヤーであるのためしかし、player2はid = 0をとります。

すべてのソリューションはありますか?

答えて

3

全てのプレイヤーは、スケルトンの配列のインデックスを持つ:1が出て、戻ってくる場合

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { 
    SkeletonFrame sf = e.SkeletonFrame; 
    //check which skeletons in array are active and use that array indexes for player index 
    SkeletonData player1 = sf.Skeletons[playerIndex1]; 
    SkeletonData player2 = sf.Skeletons[playerIndex2]; 

あなたのプレーヤーを識別するために、そのインデックスを使用することができます。
しかし両方プレイヤーがKinectのの姿を残している場合、彼らが再びのKinectの可視性を入力したときにプレーヤーのインデックスが正しいことを許可されていません。

関連する問題