📜  c# monogame 鼠标位置 - C# (1)

📅  最后修改于: 2023-12-03 15:29:46.007000             🧑  作者: Mango

C# Monogame 鼠标位置

在Monogame中,我们可以通过获取鼠标的位置来实现鼠标交互。本文将介绍如何获取鼠标位置。

获取鼠标位置

使用Monogame内置的Mouse类可以获取当前鼠标指针在游戏窗口中的位置。

MouseState mouseState = Mouse.GetState();
int mouseX = mouseState.X;
int mouseY = mouseState.Y;

Console.WriteLine("Mouse X: " + mouseX);
Console.WriteLine("Mouse Y: " + mouseY);

如上述代码所示,首先通过Mouse.GetState()方法获取到当前鼠标的状态,然后可以通过该状态对象的XY属性获取鼠标的坐标位置。

鼠标相对位置

除了获取鼠标在游戏窗口中的绝对位置之外,我们还可以获取鼠标相对于游戏窗口左上角的位置。这通常在实现拖拽或点击等功能时非常有用。

MouseState mouseState = Mouse.GetState();
int mouseX = mouseState.X - graphics.PreferredBackBufferWidth / 2;
int mouseY = -(mouseState.Y - graphics.PreferredBackBufferHeight / 2);

Console.WriteLine("Mouse relative X: " + mouseX);
Console.WriteLine("Mouse relative Y: " + mouseY);

在上述代码中,我们通过将鼠标坐标位置减去游戏窗口的中心位置来获取鼠标相对于窗口左上角的位置。注意,在Y轴上我们还需要将其取反,因为游戏窗口的坐标系与通常的坐标系相反。

鼠标事件

Monogame中可以通过绑定鼠标事件来实现鼠标交互。以下是一些可能需要用到的事件:

  • Mouse.LeftButtonDown — 鼠标左键按下事件
  • Mouse.LeftButtonUp — 鼠标左键松开事件
  • Mouse.RightButtonDown — 鼠标右键按下事件
  • Mouse.RightButtonUp — 鼠标右键松开事件
  • Mouse.ScrollWheelValue — 滚轮事件,可以根据返回值的正负判断滚动的方向
protected override void Update(GameTime gameTime)
{
    MouseState mouseState = Mouse.GetState();

    // 检测鼠标左键是否按下
    if (mouseState.LeftButton == ButtonState.Pressed)
    {
        // 获取相对于窗口左上角的鼠标位置
        int mouseX = mouseState.X - graphics.PreferredBackBufferWidth / 2;
        int mouseY = -(mouseState.Y - graphics.PreferredBackBufferHeight / 2);

        // 处理鼠标左键按下事件
        Console.WriteLine("Mouse left button down at X: " + mouseX + " Y: " + mouseY);
    }

    base.Update(gameTime);
}

在上述代码中,我们在游戏的Update方法中检测鼠标左键是否按下。如果是,则获取鼠标相对位置并处理鼠标左键按下事件。