Я пытаюсь понять, как различать двух людей, отслеживаемых с помощью Kinect 2. Итак, если игрок делает этот жест, выполните это действие. Если игрок два делает этот жест, выполните это действие. Я пытаюсь использовать идентификатор отслеживания, но я не уверен, что делаю это правильно. Вот некоторые фрагменты моего кода:Kinect v2 отслеживание отдельных людей
/// <summary>
/// Gets or sets the body tracking ID associated with the current detector
/// The tracking ID can change whenever a body comes in/out of scope
/// </summary>
public ulong TrackingId
{
get
{
return this.vgbFrameSource.TrackingId;
}
set
{
Debug.WriteLine(value);
if (this.vgbFrameSource.TrackingId != value)
{
this.vgbFrameSource.TrackingId = value;
if (value == 0)
{
outOfFrame = 0;
this.vgbFrameSource.TrackingIdLost += this.Source_TrackingIdLost;
}
else if (one == 0)
{
playerOne = value;
++one;
++outOfFrame;
}
else if (two == 0 && value != playerOne)
{
playerTwo = value;
++two;
++outOfFrame;
}
Debug.WriteLine(outOfFrame);
}
}
}
Это получает и устанавливает идентификатор отслеживания, и здесь я пытаюсь провести различие между 2-х человеком
if (outOfFrame == 0)
{
Debug.WriteLine("No Players in Frame");
}
else if (result.Detected && this.vgbFrameSource.TrackingId == playerOne && outOfFrame != 0)
{
//nameGest = gestureName;
//Debug.WriteLine(gestureName);
Player1.AbstractState.setGestureName((string)gestureName);
//Player1.AbstractState.setDetector(this);
}
else if (result.Detected && this.vgbFrameSource.TrackingId != playerOne && outOfFrame != 0)
{
//nameGest = gestureName;
//Player2.AbstractState.setGestureName(gestureName);
Player2.AbstractState.setGestureName((string)gestureName);
//Player2.AbstractState.setDetector(this);
}
И это где я отсылаю данные.
Это построение исходного кода от microsoft для дискретного детектора жестов.
EDIT: нашел проблему. Идентификатор отслеживания игрока один раз сбрасывается несколько раз, поэтому он никогда не попадает в последний оператор if в TrackingId. Просто нужно выяснить, что происходит сейчас.