2D XNA нажатие кнопки мыши

У меня есть 2D-игра, в которой я использую только мышь. Как я могу сделать это так, чтобы мой, когда мышь нависает над объектом Texture2D, Texture2D и курсор мыши меняются, а когда щелкнула текстура, она перемещается в другое место.

Проще говоря, я хочу знать, как что-то сделать, когда я наводил курсор или нажимал на Texture2D.

Ответ 1

В XNA вы можете использовать класс мыши для запроса пользовательского ввода.

Самый простой способ сделать это - проверить состояние мыши для каждого кадра и соответственно отреагировать. Является ли положение мыши внутри определенной области? Отобразите другой курсор. Правильная кнопка нажата во время этого кадра? Показать меню. и др.

var mouseState = Mouse.GetState();

Получить положение мыши в координатах экрана (относительно левого верхнего угла):

var mousePosition = new Point(mouseState.X, mouseState.Y);

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

Rectangle area = someRectangle;

// Check if the mouse position is inside the rectangle
if (area.Contains(mousePosition))
{
    backgroundTexture = hoverTexture;
}
else
{
    backgroundTexture = defaultTexture;
}

Сделайте что-нибудь, пока нажата левая кнопка мыши:

if (mouseState.LeftButton == ButtonState.Pressed)
{
    // Do cool stuff here
}

Помните, что вы всегда будете иметь информацию о текущем фрейме. Поэтому, пока что-то прохладное может произойти за время нажатия кнопки, оно прекратится, как только будет выпущено.

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

// The active state from the last frame is now old
lastMouseState = currentMouseState;

// Get the mouse state relevant for this frame
currentMouseState = Mouse.GetState();

// Recognize a single click of the left mouse button
if (lastMouseState.LeftButton == ButtonState.Released && currentMouseState.LeftButton == ButtonState.Pressed)
{
    // React to the click
    // ...
    clickOccurred = true;
}

Вы можете сделать его еще более продвинутым и работать с событиями. Таким образом, вы по-прежнему будете использовать фрагменты сверху, но вместо прямого включения кода для действия вы можете запускать события: MouseIn, MouseOver, MouseOut. ButtonPush, ButtonPressed, ButtonRelease и т.д.

Ответ 2

Я просто хотел бы добавить, что код щелчка мыши можно упростить, так что вам не нужно делать для него переменную:

if (Mouse.GetState().LeftButton == ButtonState.Pressed)
    {
        //Write code here
    }