/// <summary>
        /// Actualiza el estado del cuerpo.
        /// </summary>
        public void Update()
        {
            if (!Fixed && (Rectangle.X != lastPoint.X || Rectangle.Y != lastPoint.Y))
            {
                // Direccion (angulo) desde la ultima posicion hasta la actual:
                Direction = MathTools.GetAngle(lastPoint, Helper.PointToVector2(Rectangle.Location));
            }
            else
            {
                Direction = -1;
            }

            // Indicamos las direcciones fijas segun el angulo de direccion del objeto:
            Left = Right = Up = Down = false;
            if (Direction > -1)
            {
                if (Direction == 0)
                {
                    Right = true;
                }
                else if (Direction == 90)
                {
                    Down = true;
                }
                else if (Direction == 180)
                {
                    Left = true;
                }
                else if (Direction == 270)
                {
                    Up = true;
                }
                else
                {
                    if (Direction > 0 && Direction < 90)
                    {
                        Right = Down = true;
                    }
                    else if (Direction > 90 && Direction < 180)
                    {
                        Down = Left = true;
                    }
                    else if (Direction > 180 && Direction < 270)
                    {
                        Left = Up = true;
                    }
                    else
                    {
                        Up = Right = true;
                    }
                }
            }

            // Almacenamos la ultima posicion:
            lastPoint = this.Location;
        }
        /// <summary>
        /// Permite al juego ejecutar lógica para, por ejemplo, actualizar el mundo,
        /// buscar colisiones, recopilar entradas y reproducir audio.
        /// </summary>
        /// <param name="gameTime">Proporciona una instantánea de los valores de tiempo.</param>
        protected override void Update(GameTime gameTime)
        {
            onCollisionMessage = "";

            KeyboardState keyb  = Keyboard.GetState();
            MouseState    mouse = Mouse.GetState();

            // Permite salir del juego
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || keyb.IsKeyDown(Keys.Escape))
            {
                this.Exit();
            }

            // TODO: agregue aquí su lógica de actualización

            // Definimos los controles para desplazar el cuerpo por la escena:
            int speed = 30;

            if (keyb.IsKeyDown(Keys.D))
            {
                body.Rectangle.X += speed;
            }
            if (keyb.IsKeyDown(Keys.A))
            {
                body.Rectangle.X -= speed;
            }
            if (keyb.IsKeyDown(Keys.S))
            {
                body.Rectangle.Y += speed;
            }
            if (keyb.IsKeyDown(Keys.W))
            {
                body.Rectangle.Y -= speed;
            }

            world.Update(); // Actualizamos el estado de la escena.

            // Configuramos y trazamos el rayo:
            ray.Source     = body.Center;
            ray.SourceBody = body;
            ray.Direction  = MathTools.GetAngle(body.Center, new Vector2(mouse.X, mouse.Y));
            ray.Radius     = 800;
            ray.Trace();

            base.Update(gameTime);
        }
Exemple #3
0
 /// <summary>
 /// Dibuja una linea.
 /// </summary>
 /// <param name="a">Punto de inicio de la linea.</param>
 /// <param name="b">Punto final de la linea.</param>
 /// <param name="color">Color de la linea.</param>
 public static void DrawLine(Vector2 a, Vector2 b, Color color)
 {
     if (dummy == null)
     {
         CreateDummyTexture();                // Si no se inicializo la textura base se inicializa.
     }
     // Dibujamos la textura estirada y aplicando el angulo correcto:
     spriteBatch.Draw(dummy, new Rectangle((int)a.X, (int)a.Y, (int)Vector2.Distance(a, b), 1), null, color, MathHelper.ToRadians(MathTools.GetAngle(a, b)), Vector2.Zero, SpriteEffects.None, 0);
 }