【发布时间】:2015-02-28 16:10:51
【问题描述】:
在 Monogame 中开发我创建了一些简单的方法来检测精灵是否被点击。这就是我检查精灵是否被按下的方式。 mouseOver 表示鼠标正在与精灵相交。
var lastMouseState = mouseState;
mouseState = Mouse.GetState();
if (mouseOver && lastMouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton == ButtonState.Released)
onClick(this);
onclick 在另一个类中管理。这个类叫做Menu
private void onClick(Button btn)
{
//Toggles the button.
if (btn.HasCheckBox)//Whether the button has a checkbox
{
btn.Checked = !btn.Checked;
}
if (btn.Destination == "inGame")
unPause();
else if (btn.Destination == "Quit")
Exit();
else
openMenu(btn.Destination);
}
这里稍微解释一下:每个按钮都有一个叫做destination的属性,意思是按钮通向的地方,比如:inGame、Options、Quit等
现在这是我的问题:
当游戏暂停时,显示的菜单包含 3 个按钮(继续、选项和退出)。
当打开菜单并进入一个子菜单,然后按下一个按钮,然后菜单关闭并且鼠标没有移动,然后当我重新打开菜单并且鼠标在顶部Quit 按钮,游戏将关闭。查看下面的 gif 以获得更清晰的解释。
这只发生在Quit。当我用其他按钮尝试相同的过程时,它不起作用。 {SEE EDIT 2}
一个小示范: http://media.giphy.com/media/AxVvk9FgO6TOd5roEo/giphy.gif
我首先尝试使用music 按钮。关闭并重新打开菜单 - 没有任何反应。
我尝试使用 fullscreen 按钮,单击 > 关闭 > 重新打开菜单 -- 游戏退出。
为什么按钮点击注册在quit,而不是options?
谢谢您的帮助。如果需要更多信息,请发表评论。
编辑 显然,进入选项菜单时鼠标在哪里并不重要。只要单击(屏幕中的任何位置)并且在重新打开菜单屏幕后鼠标悬停在按钮上,游戏就会退出。
奇怪的是,我在Quit 下添加了一个新按钮,它也指向选项菜单。在使用第二个 Option 按钮测试相同的行为之后。我无法重现该错误。但是,如果我在第一个 Option 按钮悬停第二个按钮时执行相同操作,它的工作原理与 Quit 相同 - 它会立即打开选项屏幕,就像它被单击一样。
更新的 Gif:http://media.giphy.com/media/AxVvk60pK8NBjmghDa/giphy.gif
编辑 2
进一步缩小了错误。使用 foreach 时,只有当第二个按钮的索引大于第一个时才会出现该错误。解释:我按下了第二个按钮,button[1],它只适用于button[2] 及更高版本。
这是我的更新方法:
if (isPaused)
{
foreach (var button in ButtonList)
{
if (MenuScreen == button.Parent)//Menuscreen is the current screen being displayed.
//button.parent is the parent screen that holds current button. such as: ingame, pause, etc.
{
button.Update();
}
}
}
现在我知道它背后的逻辑,但不知道它发生在哪里。
【问题讨论】: