2015-12-02 52 views
1

我正在为我的游戏主菜单编写一个复杂的GUI。我已经用它自己的构造函数创建了一个ButtonGUI类,其中包含按钮文本,文本颜色等参数。我在每个按钮的文本后面都绘制了一个背景纹理,使其看起来很漂亮。所以,我实现了一个简单的鼠标输入系统:C#Monogame - 检测鼠标暂停

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属性,它等于传递给构造函数的按钮的位置(显然,按钮的大小每次都是相同的)。上述代码背后的逻辑很简单,如果鼠标悬停在按钮实例SourceRectbtn.IsHovered设置为true,它会更改文本颜色。点击后,我的WindowGUI类实例将打开并显示其他设置。

所以我的目标是使这些按钮看起来不错,并有Windows风格的按钮机制。所以我正在寻找一个代码来检查鼠标持有事件,并且例如有一个bool,它改变了按钮纹理或者我自己可以做的任何事情。但问题是,我试图合并人们给出的关于previousMouseStatenewMouseState的解决方案,但我不确定它在Monogame中的工作方式与XNA中的工作方式一样......或者是我的实现错误?我可以更清楚地了解如何在游戏中处理鼠标保持功能吗?提前致谢!

+0

如果不显示它,我们如何判断您的实现是否是错误的?告诉我们你试过的东西。 – tzachs

回答

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 
    } 

}