Перемещение объектов

Последнее обновление: 14.11.2015

Перемещение спрайтов осуществляется довольно просто. Необходимо лишь перерисовать спрайт на новой позиции, и у пользователя возникнет иллюзия движения. Определим следующий код игры:

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() данная переменная будет использоваться для отрисовки. Если спрайт достиг границ окна, то меняет направление движения на противоположное.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850