Ответ 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 и т.д.