C# Monogame - 检测鼠标按住
C# Monogame - detect mouse hold
我正在为游戏的主菜单编写一个复杂的 GUI。我已经创建了一个 ButtonGUI
class,它有自己的构造函数,带有按钮文本、文本颜色等参数。我在每个按钮的文本后面绘制了一个背景纹理,以使其看起来漂亮。所以我实现了一个简单的鼠标输入系统:
void DetectBtnInput(ButtonGUI btn)
{
if (mouseRect.Intersects(btn.SourceRect))
{
btn.IsHovered = true;
if (mouseState.LeftButton == ButtonState.Pressed) settingsWindow.isOpen = true;
}
}
此方法在 Update(GameTime gameTime)
中针对 ButtonGUI
class 的每个实例调用。所以 mouseRect = new Rectangle(mouseState.X, mouseState.Y, 1, 1);
ButtonGUI
class 的每个实例都有一个 Rectangle SourceRect
属性,它等于传递给构造函数的按钮的位置(显然按钮的大小每次都相同).上面代码背后的逻辑很简单,如果鼠标悬停在按钮实例的 SourceRect
上, btn.IsHovered
设置为 true,它会改变文本颜色。单击后,我的 WindowGUI
class 实例将打开并带有其他设置。
所以我的目标是让这些按钮看起来漂亮并具有 Windows 风格的按钮机制。所以我正在寻找一个代码来检查类似鼠标按住的事件,例如 bool
可以更改按钮纹理或我自己可以做的任何事情。但问题是我尝试合并人们给出的关于 previousMouseState
和 newMouseState
的解决方案,但我不确定它是否在 Monogame 中工作,因为它在 XNA 中工作......或者是我的实现错误的?我可以举一个更清楚的例子来说明您如何处理游戏中的鼠标按住吗?提前致谢!
如果你的意思是玩家可以点击并按住(根据问题标题),在他们松开之前什么也不会发生。以前和当前状态应该可以正常工作,例如。
请原谅语法中的任何错误,希望您可以将此作为伪代码来制作自己的代码。
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
}
}
我正在为游戏的主菜单编写一个复杂的 GUI。我已经创建了一个 ButtonGUI
class,它有自己的构造函数,带有按钮文本、文本颜色等参数。我在每个按钮的文本后面绘制了一个背景纹理,以使其看起来漂亮。所以我实现了一个简单的鼠标输入系统:
void DetectBtnInput(ButtonGUI btn)
{
if (mouseRect.Intersects(btn.SourceRect))
{
btn.IsHovered = true;
if (mouseState.LeftButton == ButtonState.Pressed) settingsWindow.isOpen = true;
}
}
此方法在 Update(GameTime gameTime)
中针对 ButtonGUI
class 的每个实例调用。所以 mouseRect = new Rectangle(mouseState.X, mouseState.Y, 1, 1);
ButtonGUI
class 的每个实例都有一个 Rectangle SourceRect
属性,它等于传递给构造函数的按钮的位置(显然按钮的大小每次都相同).上面代码背后的逻辑很简单,如果鼠标悬停在按钮实例的 SourceRect
上, btn.IsHovered
设置为 true,它会改变文本颜色。单击后,我的 WindowGUI
class 实例将打开并带有其他设置。
所以我的目标是让这些按钮看起来漂亮并具有 Windows 风格的按钮机制。所以我正在寻找一个代码来检查类似鼠标按住的事件,例如 bool
可以更改按钮纹理或我自己可以做的任何事情。但问题是我尝试合并人们给出的关于 previousMouseState
和 newMouseState
的解决方案,但我不确定它是否在 Monogame 中工作,因为它在 XNA 中工作......或者是我的实现错误的?我可以举一个更清楚的例子来说明您如何处理游戏中的鼠标按住吗?提前致谢!
如果你的意思是玩家可以点击并按住(根据问题标题),在他们松开之前什么也不会发生。以前和当前状态应该可以正常工作,例如。
请原谅语法中的任何错误,希望您可以将此作为伪代码来制作自己的代码。
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
}
}