예제 #1
0
        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();
        }
예제 #2
0
        /// <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);
            }));
        }