【问题标题】:Mouse button keeps being pressed instead of clicking鼠标按钮一直被按下而不是单击
【发布时间】:2019-05-14 16:21:55
【问题描述】:

我目前正在开发一款单机游戏。游戏很大程度上基于点击按钮,这就是问题发生的地方。每当我按住鼠标左键然后将其移到游戏中的某个按钮上时,该按钮就会立即被点击。

我尝试通过多种方式解决此问题,通过以不同方式重新排列 if 语句,添加额外的 bool 以检查是否单击了鼠标按钮等。但没有任何运气。也没有在任何地方找到任何解决方案。

public override void Update(GameTime gameTime)
{
    MouseState state = Mouse.GetState();

    if (new Rectangle((position - ElementCenter).ToPoint(), sprite.Bounds.Size)
           .Contains(state.Position) && oldState.LeftButton == ButtonState.Released)
    {
        renderColor = Color.LightSlateGray;
        if (state.LeftButton == ButtonState.Pressed &&
            oldState.LeftButton == ButtonState.Released)
        {
            switch (button)
            {
                case "UI/submit":
                    if (GameWorld.Instance.Team.UserTeamName.Length > 0)
                    {
                        GameWorld.Instance.SubmitTeamName();
                    }
                    break;
                case "UI/teammanager":
                    GameWorld.Instance.TeamManager();
                    break;
                default:
                    break;
            }
        }
    }
    else
    {
        renderColor = Color.White;
    }
    oldState = state;
}

理想情况下,我希望只有在单击按钮之前释放鼠标左键时才能单击按钮。

【问题讨论】:

    标签: c# monogame


    【解决方案1】:

    如果oldState被声明为实例字段,这个类的不同实例会有不同的版本。即,旧状态可能会丢失。

    oldState 声明为static

    private static MouseState oldState = Mouse.GetState();
    

    【讨论】:

      【解决方案2】:

      我通常使用这样的类来读取输入

      public class InputManager
      {
          KeyboardState currentKeyboard, previousKeyboard;
          MouseState currentMouse, previousMouse;
      
          public bool LeftKeyIsHeldDown { get; private set; }
          public bool RightKeyIsHeldDown { get; private set; }
          public bool JumpWasJustPressed { get; private set; }
          public bool FireWasJustPressed { get; private set; }
      
          public void Update()
          {
              previousKeyboard = currentKeyboard;
              currentKeyboard = Keyboard.GetState();
      
              previousMouse = currentMouse;
              currentMouse = Mouse.GetState();
      
              LeftKeyIsHeldDown = currentKeyboard.IsKeyDown(Keys.A);
              RightKeyIsHeldDown = currentKeyboard.IsKeyDown(Keys.D);
              JumpWasJustPressed =  currentKeyboard.IsKeyDown(Keys.Space) && previousKeyboard.IsKeyUp(Keys.Space);
              FireWasJustPressed = currentMouse.LeftButton == ButtonState.Pressed && previousMouse.LeftButton == ButtonState.Released;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多