using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; /// /// A simple example to make object move where the mouse is clicked /// namespace GotoLocation { #if WINDOWS || XBOX static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { using (Game1 game = new Game1()) { game.Run(); } } } #endif public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Vector2 direction = Vector2.Zero; Vector2 position = Vector2.Zero; float speed = 2f; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; this.IsMouseVisible = true; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); position.X = (graphics.PreferredBackBufferWidth / 2) - (Content.Load("dot").Width / 2); position.Y = (graphics.PreferredBackBufferHeight / 2) - (Content.Load("dot").Height / 2); direction = position; } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); if (Mouse.GetState().LeftButton == ButtonState.Pressed) { direction = new Vector2(Mouse.GetState().X-(Content.Load("dot").Width / 2), Mouse.GetState().Y-(Content.Load("dot").Height / 2)); } Vector2 move = Helper_Direction.MoveTowards(position, direction, speed); position.X += move.X; position.Y += move.Y; base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(Content.Load("dot"), position, Color.White); spriteBatch.End(); base.Draw(gameTime); } } public static class Helper_Direction { public static double FaceObject(Vector2 position, Vector2 target) { return (Math.Atan2(position.Y - target.Y, position.X - target.X) * (180 / Math.PI)); } public static Vector2 MoveTowards(Vector2 position, Vector2 target, float speed) { double direction = (float)(Math.Atan2(target.Y - position.Y, target.X - position.X) * 180 / Math.PI); Vector2 move = new Vector2(0, 0); move.X = (float)Math.Cos(direction * Math.PI / 180) * speed; move.Y = (float)Math.Sin(direction * Math.PI / 180) * speed; return move; } } }