Управление мышью

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

Для работы с устройством мыши в MonoGame имеется класс Mouse. Этот класс имеет метод GetState(), который извлекает текущее состояние устройства мыши в виде структуры MouseState. С помощью этой структуры можно получить состояния отдельных кнопок мыши, узнать, нажаты они или нет. Основные свойства MouseState:

  • LeftButton: возвращает состояние левой кнопки мыши в виде объекта ButtonState

  • MiddleButton: возвращает состояние средней кнопки мыши в виде объекта ButtonState

  • RightButton: возвращает состояние правой кнопки мыши в виде объекта ButtonState

  • ScrollWheelValue: возвращает суммарное перемещение колеса мыши с начала игры

  • XButton1: возвращает состояние дополнительной кнопки мыши (при ее наличии)

  • XButton2: возвращает состояние другой дополнительной кнопки мыши (при ее наличии)

  • X: возвращает x-координату указателя мыши

  • Y: возвращает y-координату указателя мыши

Еще один метод класса Mouse - метод SetPosition(int x, int y) устанавливает координаты указателя мыши по отношению к верхнему левому углу игрового поля.

По молчанию указатель мыши в MonoGame невидим, и для его отображения надо у класса Game установить свойство IsMouseVisible равным true.

Итак, перепишем приложение из прошлой темы так, чтобы в нем поведение спрайта управлялось указателем мыши:

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 = 5f;
        MouseState lastMouseState;
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            IsMouseVisible = true;
        }

        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();
				
			MouseState currentMouseState = Mouse.GetState();
			
            if (currentMouseState.X != lastMouseState.X ||
                currentMouseState.Y != lastMouseState.Y)
                position = new Vector2(currentMouseState.X, currentMouseState.Y);
            lastMouseState = currentMouseState;
			
            base.Update(gameTime);
        }
        
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);

            spriteBatch.Draw(texture, position, Color.White);

            spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}

Переменная lastMouseState фиксирует последнюю позицию курсора. И если значение в currentMouseState отличается от lastMouseState, то спрайт перемещается на новую позицию.

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