Обнаружение проигрывателя 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.