/// <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); }
/// <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); }