Monogame 3.5:鼠标单击未检测到

时间:2016-07-01 00:08:50

标签: mouseevent mouse monogame

我的monogame游戏已停止响应鼠标点击。在3.5版之前,这个工作正常。以下是我目前获得输入的方式:

protected override void Update (GameTime game_time)
  {
  Mouse_Input (game_time);
  }

void Mouse_Input(GameTime game_time)
  {
  mouse_current = Mouse.GetState();

  if (mouse_current.LeftButton == ButtonState.Pressed)
    {
    // click
    }
  }

在函数中设置断点会显示所有代码都被命中,但LeftButton始终是ButtonState.Released。

我尝试使用有线鼠标和触控板。键盘输入工作正常。还有其他人遇到过这个吗?

2 个答案:

答案 0 :(得分:0)

我总是这样使用。

MouseState currentMouseState;
MouseState oldMouseState;

public bool checkClick()
{
    oldMouseState = currentMouseState;
    currentMouseState = Mouse.GetState();

    if (Visible)
    {
        if (currentMouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released)
        {
            return true;
        }
    }
}

如果要检查鼠标是否单击了一个矩形(例如Hud元素)

public bool checkClickRectangle(Rectangle rec)
{
    oldMouseState = currentMouseState;
    currentMouseState = Mouse.GetState();

    if (Visible)
    {
        if (rec.Contains(new Vector2(Mouse.GetState().X, Mouse.GetState().Y)) && currentMouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released)
        {
            return true;
        }
    }
}

答案 1 :(得分:0)

这对Monogame来说实际上不是问题,但我的游戏逻辑中存在一个很难追查的问题。

升级到3.5之后,我不得不重新配置我的Texture2D的加载方式,这也意味着重构一些类。我最终得到了一个类中的一个类,它们都继承自Game。

public class Brush_Control : Game
  {
  public class Tile : Game
    {

消除过程缩小了对这个类的搜索范围。我相信这会导致无限循环以某种方式干扰输入,但不会抛出错误或导致明显的冻结。

删除内部游戏参考作为父母修复了问题,结果发现我不再需要在那里拥有它。