您不能为此设置一个简单的布尔值,因为 SDK 的事件驱动方法将返回 6 个骨架结构,即使它们都是空的。不过,使用一点 LINQ 和空值检查可以得到你想要的东西。
脚步:
- 初始化 Kinect(我将为此应用 WPFViewers 使用包含的 KinectSensorChooser)启用并注册骨骼流。
- 在骨架事件中检查以确保您没有得到空骨架集合(它发生了)
- 使用 LINQ 获取第一个将其跟踪属性设置为跟踪的骨架。您也可以只使用 for 循环,我只是发现 LINQ 对这些类型的迭代很有用。
- 如果 LINQ 查询后的骨架不为空,请执行某些操作。
如果您想快速上手并有一些天赋,您可以利用下载 SDK Kinect Explorer 时包含的示例。有一个骨架查看器和 KinectSensorChooser,它可以让您拥有一个功能齐全的应用程序,只需很少的代码。在此处阅读有关此示例中包含的骨骼查看器的更多信息
我偶然发现了是否为此提供代码。我认为最好用执行操作所需的逻辑而不是实际代码来回答这个问题......因为你问了:) 但是,如果你想要这个代码,你可以从Channel 9 的快速入门或我的书第 4 章中获得它
编辑(扩展 KinectExplorer):
为了扩展 KinectExplorer 以在检测到骨架时做出响应,只需在 KinectSkeletonViewer.xaml.cs 中找到函数 KinectAllFramesReady。在这个函数内部,有一个对 hasSkeletonData 的布尔检查,当 Kinect 的可视框架中存在骨架时,将调用这个 if 语句。所以:
private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs e)
{
//Checking for Skeleton
if (haveSkeletonData)
{
//Do Stuff Here
}
}