按住鼠标按钮而不是单击

问题描述 投票:0回答:2

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

我试图通过多种方式解决问题,通过以不同的方式重新排列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
2个回答
3
投票

如果将oldState声明为实例字段,则此类的不同实例将具有不同的版本。即,旧州可能会迷路。

宣布oldStatestatic

private static MouseState oldState = Mouse.GetState();

0
投票

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

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.