Для работы с устройством мыши в 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, то спрайт перемещается на новую позицию.