Перемещение спрайтов осуществляется довольно просто. Необходимо лишь перерисовать спрайт на новой позиции, и у пользователя возникнет иллюзия движения. Определим следующий код игры:
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace Game1 { public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D texture; Vector2 position = Vector2.Zero; float speed = 2f; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); texture = Content.Load<Texture2D>("monokot_tr"); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); position.X += speed; if (position.X > Window.ClientBounds.Width - texture.Width || position.X < 0) speed *= -1; base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(texture, position, Color.White); spriteBatch.End(); base.Draw(gameTime); } } }
Здесь добавляются две дополнительных переменных: Vector2 position
для хранения текущей позиции спрайта и
float speed
для шага перемещения.
Поскольку за обновление состояния игры отвечает метод Update()
, который, как и метод Draw()
, вызывается
60 раз в секунду, то в Update производим изменение переменной position
на значение переменной speed
. В методе Draw()
данная переменная будет использоваться для отрисовки.
Если спрайт достиг границ окна, то меняет направление движения на противоположное.