繁体   English   中英

C#Monogame-检测鼠标按住

[英]C# Monogame - detect mouse hold

我正在为游戏的主菜单编写一个复杂的GUI。 我已经创建了一个ButtonGUI类,它具有自己的构造函数,并带有按钮文本,文本颜色等参数。我在每个按钮的文本后均绘制了背景纹理,以使其看起来更漂亮。 因此,我实现了一个简单的鼠标输入系统:

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

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

因此,我的目标是使这些按钮看起来不错,并具有Windows样式的按钮机制。 因此,我正在寻找一种代码来检查类似鼠标按住的事件,例如具有更改按钮纹理的bool或我自己可以做的任何事情。 但是问题是我尝试结合人们给出的关于previousMouseStatenewMouseState的解决方案,但是我不确定它是否像在XNA中那样在Monogame中起作用...还是我的实现错了? 关于您如何处理游戏中的鼠标按住键,我是否可以有一个更清晰的示例? 提前致谢!

如果您是说玩家可以单击并按住(按问题标题),则在他们释放之前什么也不会发生。 以前和当前状态应可以很好地实现,例如。

宽恕语法上的任何错误,希望您可以将其视为足以构成自己的伪代码。

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
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM