public MainWindow() { InitializeComponent(); // Creamos un nuevo objeto de Kinect helper = new KinectUtilities(); helper.ToggleSeatedMode(true); // Asignamos a la clase el método a ejecutar en cada cambio del esqueleto del jugador helper.SkeletonDataChanged += this.SkeletonDataChanged; SkeletonImage.Source = helper.getSkeletonImage(); // Comprobamos que el Kinect esté conectado testKinect(); }
/// <summary> /// Evento de actualización del esqueleto. /// Reconoce la posición de los jugadores en cada frame y los muestra en la ventana /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SkeletonDataChanged(object sender, KinectUtilities.SkeletonDataChangeEventArgs e) { if (gameThread == null) return; // Comprobamos la posición de los jugadores Skeleton right = null; Skeleton left = null; for (int i = 0; i < e.skeletons.Length; i++) { Skeleton skel = e.skeletons[i]; if (skel.TrackingState == SkeletonTrackingState.Tracked) { Point position = helper.SkeletonPointToScreen(skel.Joints[JointType.ShoulderCenter].Position); if ((position.X > 0 && position.X <= GameCanvas.Width / 2) && left == null) left = skel; else if ((position.X > GameCanvas.Width / 2 && position.X < GameCanvas.Width) && right == null) right = skel; } if (left != null & right != null) break; } // Mostramos el marcador del jugador solo en el caso de que esté jugando if (left == null) { playerOne.setVisibility(false); playerOne.isConnected = false; } else { playerOne.isConnected = true; Point playerOneHand = helper.SkeletonPointToScreen(left.Joints[Utilities.HANDTRACK].Position); Point playerOneHead = helper.SkeletonPointToScreen(left.Joints[JointType.Head].Position); playerOne.updatePosition(playerOneHead, playerOneHand); } // Mostramos el marcador del jugador solo en el caso de que esté jugando if (right == null) { playerTwo.setVisibility(false); playerTwo.isConnected = false; } else { playerTwo.isConnected = true; Point playerTwoHand = helper.SkeletonPointToScreen(right.Joints[Utilities.HANDTRACK].Position); Point playerTwoHead = helper.SkeletonPointToScreen(right.Joints[JointType.Head].Position); playerTwo.updatePosition(playerTwoHead, playerTwoHand); } this.Dispatcher.Invoke((Action)(() => { Canvas.SetLeft(playerOne.getMarkShape(), playerOne.getPlayerPosition().X); Canvas.SetTop(playerOne.getMarkShape(), playerOne.getPlayerPosition().Y); Canvas.SetLeft(playerTwo.getMarkShape(), playerTwo.getPlayerPosition().X); Canvas.SetTop(playerTwo.getMarkShape(), playerTwo.getPlayerPosition().Y); })); }