在您的SkeletonFrameReady回调函数中,您可能有一个循环(或类似的循环)遍历活动骨架。你也应该看看它们是否被积极跟踪。
foreach (Skeleton skeleton in _skeletons) {
// some extra setup stuff here...
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
return;
// the Kinect is actively tracking the skeleton at this point
...
}
你想要在这一点上做的是检查人的位置Z。选一个你想用作参考的关节 - 我建议头部,臀部或脊柱。如果Z的位置是你想要的位置,继续对骨架进行操作。
foreach (Skeleton skeleton in _skeletons) {
....
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
return;
if (skeleton.Joints[JointType.Spine].Position.Z < _minValue || skeleton.Joints[JointType.Spine].Position.Z > _maxValue)
return;
// if you reach this point, the person is standing a certain distance from the Kinect. Not too close, not too far away.
}
您将要检查Z位置的范围。它可以是一个小范围,但是您希望给用户足够的空间来移动一点,而Kinect忽略它们。
更新:您可能也可以使用Skeleton的Position属性。它对Kinect的FOV中的整个骨架有一个x/y/z参考。