8

2人用ゲーム(ShapeGameなど)を作成しましたが、問題は、プレーヤーの1人がゲームシーンから離れたときに、どちらのプレーヤー(どのプレーヤー)がゲームから離れたかを検出できないことです。

ゲームには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、最初に検出されたプレーヤー(player1と呼びます)と2番目に検出されたプレーヤー(player2と呼びます)に1を与えます。player2がゲームを離れて再参加した場合、問題はありません。再びかかりますid = 1。ただし、player1がゲームから離れるid = 0と、この時点で最初に検出されたプレーヤーであるため、player2がテイクします。

解決策はありますか?

4

1 に答える 1

3

すべてのプレーヤーは、スケルトン配列にインデックスを持っています。

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];

そのインデックスを使用して、1人が離れて戻ってきた場合に、プレーヤーを識別できます。
ただし、両方のプレーヤーがKinectの視界を離れた場合、Kinectの可視性に再び入るときに、プレーヤーのインデックスが正しいことは認められません。

于 2012-05-12T09:36:51.083 に答える