C#Monogame - 检测鼠标保持

时间:2015-12-02 20:16:59

标签: c# user-interface mouse

我正在为我的游戏主菜单编写一个复杂的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中工作...或者是我的实现错误?我是否可以更清楚地了解如何在游戏中处理鼠标?提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果你的意思是玩家可以点击并按住(根据问题标题),并且在他们发布之前没有任何反应。上一个和当前状态应该可以正常工作,如。

请原谅语法中的任何修正,希望你可以把它作为伪代码来制作你自己的代码。

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
  }

}