2D XNA игровая мышь - PullRequest
       8

2D XNA игровая мышь

12 голосов
/ 15 марта 2012

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

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

Ответы [ 2 ]

32 голосов
/ 15 марта 2012

В 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 и т. Д.

0 голосов
/ 04 марта 2016

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

if (Mouse.GetState().LeftButton == ButtonState.Pressed)
    {
        //Write code here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...