Monogame 3.5:未检测到鼠标点击

Monogame 3.5: Mouse Click Not Detected

我的单人游戏已停止响应鼠标点击。在 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。

我试过有线鼠标和触控板。键盘输入工作正常。还有其他人 运行 参与其中吗?

我一直用这种方式。

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;
        }
    }
}

这实际上不是 Monogame 的问题,而是我的游戏逻辑中的一个问题,很难追踪。

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

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

排除过程将搜索范围缩小到 class。我相信这会导致无限循环以某种方式干扰输入,但不会引发错误或导致明显的冻结。

删除作为父项的内部 Game 引用解决了这个问题,事实证明我不再需要它了。