SDK のイベント ドリブン アプローチでは、すべてが空であっても 6 つの骨格構造が返されるため、単純なブール値を設定することはできません。ただし、少しの LINQ と null チェックを使用すると、探しているものが得られます。
手順:
- Kinect を初期化します (このアプリの WPFViewers には付属の KinectSensorChooser を使用します) を有効にして、スケルトン ストリームを登録します。
- スケルタル イベント チェックで、null スケルトン コレクションを取得していないことを確認します (発生します)。
- LINQ を使用して、tracking プロパティが tracked に設定されている最初のスケルトンを取得します。for ループを使用することもできます。LINQ はこれらのタイプの反復に役立つことがわかりました。
- LINQ クエリの後のスケルトンが null でない場合は、何かを行います。
これを手早く始めたい場合は、SDK Kinect Explorer をダウンロードするときに含まれるサンプルを利用できます。KinectSensorChooser と一緒にスケルトン ビューアーがあり、ごくわずかなコードで完全に機能するアプリを作成できます。このサンプルに含まれる Skeletal Viewer の詳細については、こちらをご覧ください
このためのコードを提供するかどうかについて、私は少しつまずきました。実際のコードではなく、アクションを実行するために必要なロジックでこれに答える方が良いと思いました...あなたが尋ねたので:)しかし、このコードが必要な場合は、Channel 9のQuickstartsまたは私の本の第4章から入手できます
編集 (KinectExplorer の拡張):
スケルトンが検出されたときに応答するように KinectExplorer を拡張するには、KinectSkeletonViewer.xaml.cs で KinectAllFramesReady 関数を見つけます。この関数の内部には、haveSkeletonData のブール チェックがあります。この if ステートメントは、Kinect の表示可能なフレームにスケルトンが存在する場合に呼び出されます。それで:
private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs e)
{
//Checking for Skeleton
if (haveSkeletonData)
{
//Do Stuff Here
}
}