void SkeletonsReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame skeletonFrame = e.SkeletonFrame; //KinectSDK TODO: This nullcheck shouldn't be required. //Unfortunately, this version of the Kinect Runtime will continue to fire some skeletonFrameReady events after the Kinect USB is unplugged. if (skeletonFrame == null) { return; } int iSkeletonSlot = 0; foreach (SkeletonData data in skeletonFrame.Skeletons) { if (SkeletonTrackingState.Tracked == data.TrackingState) { Player player; if (players.ContainsKey(iSkeletonSlot)) { player = players[iSkeletonSlot]; } else { player = new Player(iSkeletonSlot); player.setBounds(playerBounds); players.Add(iSkeletonSlot, player); } player.lastUpdated = DateTime.Now; // Update player's bone and joint positions if (data.Joints.Count > 0) { player.isAlive = true; // Head, hands, feet (hit testing happens in order here) player.UpdateJointPosition(data.Joints, JointID.Head); player.UpdateJointPosition(data.Joints, JointID.HandLeft); player.UpdateJointPosition(data.Joints, JointID.HandRight); player.UpdateJointPosition(data.Joints, JointID.FootLeft); player.UpdateJointPosition(data.Joints, JointID.FootRight); // Hands and arms player.UpdateBonePosition(data.Joints, JointID.HandRight, JointID.WristRight); player.UpdateBonePosition(data.Joints, JointID.WristRight, JointID.ElbowRight); player.UpdateBonePosition(data.Joints, JointID.ElbowRight, JointID.ShoulderRight); player.UpdateBonePosition(data.Joints, JointID.HandLeft, JointID.WristLeft); player.UpdateBonePosition(data.Joints, JointID.WristLeft, JointID.ElbowLeft); player.UpdateBonePosition(data.Joints, JointID.ElbowLeft, JointID.ShoulderLeft); // Head and Shoulders player.UpdateBonePosition(data.Joints, JointID.ShoulderCenter, JointID.Head); player.UpdateBonePosition(data.Joints, JointID.ShoulderLeft, JointID.ShoulderCenter); player.UpdateBonePosition(data.Joints, JointID.ShoulderCenter, JointID.ShoulderRight); // Legs player.UpdateBonePosition(data.Joints, JointID.HipLeft, JointID.KneeLeft); player.UpdateBonePosition(data.Joints, JointID.KneeLeft, JointID.AnkleLeft); player.UpdateBonePosition(data.Joints, JointID.AnkleLeft, JointID.FootLeft); player.UpdateBonePosition(data.Joints, JointID.HipRight, JointID.KneeRight); player.UpdateBonePosition(data.Joints, JointID.KneeRight, JointID.AnkleRight); player.UpdateBonePosition(data.Joints, JointID.AnkleRight, JointID.FootRight); player.UpdateBonePosition(data.Joints, JointID.HipLeft, JointID.HipCenter); player.UpdateBonePosition(data.Joints, JointID.HipCenter, JointID.HipRight); // Spine player.UpdateBonePosition(data.Joints, JointID.HipCenter, JointID.ShoulderCenter); } } iSkeletonSlot++; } }
void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame skeletonFrame = e.SkeletonFrame; int iSkeletonSlot = 0; foreach (SkeletonData data in skeletonFrame.Skeletons) { if (SkeletonTrackingState.Tracked == data.TrackingState) { Player player; if (players.ContainsKey(iSkeletonSlot)) { player = players[iSkeletonSlot]; } else { player = new Player(iSkeletonSlot); player.setBounds(playerBounds); players.Add(iSkeletonSlot, player); } player.lastUpdated = DateTime.Now; // Update player's bone and joint positions if (data.Joints.Count > 0) { player.isAlive = true; // Head, hands, feet (hit testing happens in order here) player.UpdateJointPosition(data.Joints, JointID.Head); player.UpdateJointPosition(data.Joints, JointID.HandLeft); player.UpdateJointPosition(data.Joints, JointID.HandRight); player.UpdateJointPosition(data.Joints, JointID.FootLeft); player.UpdateJointPosition(data.Joints, JointID.FootRight); // Hands and arms player.UpdateBonePosition(data.Joints, JointID.HandRight, JointID.WristRight); player.UpdateBonePosition(data.Joints, JointID.WristRight, JointID.ElbowRight); player.UpdateBonePosition(data.Joints, JointID.ElbowRight, JointID.ShoulderRight); player.UpdateBonePosition(data.Joints, JointID.HandLeft, JointID.WristLeft); player.UpdateBonePosition(data.Joints, JointID.WristLeft, JointID.ElbowLeft); player.UpdateBonePosition(data.Joints, JointID.ElbowLeft, JointID.ShoulderLeft); // Head and Shoulders player.UpdateBonePosition(data.Joints, JointID.ShoulderCenter, JointID.Head); player.UpdateBonePosition(data.Joints, JointID.ShoulderLeft, JointID.ShoulderCenter); player.UpdateBonePosition(data.Joints, JointID.ShoulderCenter, JointID.ShoulderRight); // Legs player.UpdateBonePosition(data.Joints, JointID.HipLeft, JointID.KneeLeft); player.UpdateBonePosition(data.Joints, JointID.KneeLeft, JointID.AnkleLeft); player.UpdateBonePosition(data.Joints, JointID.AnkleLeft, JointID.FootLeft); player.UpdateBonePosition(data.Joints, JointID.HipRight, JointID.KneeRight); player.UpdateBonePosition(data.Joints, JointID.KneeRight, JointID.AnkleRight); player.UpdateBonePosition(data.Joints, JointID.AnkleRight, JointID.FootRight); player.UpdateBonePosition(data.Joints, JointID.HipLeft, JointID.HipCenter); player.UpdateBonePosition(data.Joints, JointID.HipCenter, JointID.HipRight); // Spine player.UpdateBonePosition(data.Joints, JointID.HipCenter, JointID.ShoulderCenter); } } iSkeletonSlot++; } }