Обнаружение проигрывателя Kinect SDK

Я только что создал игру для двух игроков (например, ShapeGame), но проблема в том, что когда один из игроков покидает игровую сцену, я не могу определить, какой (какой игрок) ушел из игры.

Подумайте, что в игре 2 машины. Первый обнаруженный игрок (назовите его player1) использует левого, а player2 - правого. Когда игрок 1 покидает сцену, игрок внезапно получает контроль над левой машиной, и, если игрок 1 возвращается в игру, игрок 1 снова получает контроль над левой машиной, а игрок 2 получает контроль над правой машиной.

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

        id++;
    }
}

Дело в том, что программа дает id = 0 для первого обнаруженного игрока (назовите его player1) и 1 для второго обнаруженного игрока (назовите его player2). Когда игрок2 выходит из игры и возвращается, проблем нет. Это снова занимает id = 1, но когда игрок1 выходит из игры, игрок2 берет id = 0 из-за этого является первым обнаруженным игроком в этой точке.

Какие-либо решения?

1 ответ

Решение

У каждого игрока есть индекс в массиве Skeleton:

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.

Другие вопросы по тегам