C#单机游戏-检测鼠标按住

本文关键字:鼠标 检测 单机游戏 | 更新日期: 2023-09-27 18:25:27

我正在为游戏的主菜单编写一个复杂的GUI。我已经创建了一个ButtonGUI类,它有自己的构造函数,参数包括按钮文本、文本颜色等。我在每个按钮的文本后面都画了一个背景纹理,让它看起来很漂亮。所以我实现了一个简单的鼠标输入系统:

void DetectBtnInput(ButtonGUI btn)
{
    if (mouseRect.Intersects(btn.SourceRect))
    {
        btn.IsHovered = true;
        if (mouseState.LeftButton == ButtonState.Pressed) settingsWindow.isOpen = true;
    }
}

Update(GameTime gameTime)中为ButtonGUI类的每个实例调用此方法。所以mouseRect = new Rectangle(mouseState.X, mouseState.Y, 1, 1);ButtonGUI类的每个实例都有一个Rectangle SourceRect属性,该属性等于传递给构造函数的按钮的位置(显然按钮的大小每次都是相同的)。上面代码背后的逻辑很简单,如果鼠标悬停在按钮实例的SourceRect上,btn.IsHovered设置为true,它将更改文本颜色。单击后,我的WindowGUI类实例将打开,并带有其他设置。

所以我的目标是让这些按钮看起来很漂亮,并具有Windows风格的按钮机制。因此,我正在寻找一个代码来检查类似鼠标按住的事件,例如,有一个bool,它可以更改按钮纹理或我自己可以做的任何事情。但问题是,我试图结合人们给出的关于previousMouseStatenewMouseState的解决方案,但我不确定它在Monogame中是否像在XNA中一样有效。。。或者我的实现是错误的?我能有一个更清晰的例子来说明你在游戏中如何处理鼠标握拍吗?提前感谢!

C#单机游戏-检测鼠标按住

如果你的意思是玩家可以点击并按住(根据问题标题),在他们释放之前不会发生任何事情。以前和当前的状态应该可以作为.之类的实现正常工作

请原谅语法上的任何错误,希望你能把它当作伪代码来制作自己的代码。

MouseState prev, curr;
curr = GetMouseState();
update()
{
  prev = curr;
  curr = GetMouseState();
  // Simple check for a mouse click (from being held down)
  if (curr == MouseState.Up && prev == MouseState.Down)
  {
    // Do mouse stuff here
  }
}