冻结菜单错误

本文关键字:错误 菜单 冻结 | 更新日期: 2023-09-27 18:13:44

当我点击向下箭头时,它会卡在第二个选择上,向上或向下不再工作,我该如何解决这个问题?

第二个问题:如何在更改菜单项时防止冻结?当我更改菜单项时,它会冻结第二个选择。下面是关于这个问题的代码;

keyboard = Keyboard.GetState();
mouse = Mouse.GetState();
    if (keyboard.IsKeyUp(Keys.Up) && prevKeyboard.IsKeyDown(Keys.Down))
    {
        if (selected > 0) selected--;
        else selected.Equals(buttonList.Count - 1);
    }
    if (keyboard.IsKeyUp(Keys.Up) && prevKeyboard.IsKeyDown(Keys.Down))
    {
        if (selected < buttonList.Count - 1) selected++;
        else selected.Equals(0);
    }
    prevMouse = mouse;
    prevKeyboard = keyboard;
}

冻结菜单错误

你的if语句没有多大意义,它们都是完全相同的:

if (keyboard.IsKeyUp(Keys.Up) && prevKeyboard.IsKeyDown(Keys.Down))

,但如果它们是相同的,人们会认为你只是把它们合并成一个。

看起来你正在尝试使用以下范例

if (keyboard.IsKeyUp(Keys.Down) && prevKeyboard.IsKeyDown(Keys.Down))
...
if (keyboard.IsKeyUp(Keys.Up) && prevKeyboard.IsKeyDown(Keys.Up))

我注意到的另一个奇怪之处是您使用Equals()方法的方式。

你没有对它的返回值做任何事情。

Equals()用于比较,它返回一个bool值告诉你元素是否相等,但它看起来像你使用它来赋值或其他东西。

你是在找类似

的东西吗?
else 
    selected = 0;
不是

else selected.Equals(0);

修改后的原始代码对我来说工作得很好。修改后如下:

    public void Update(GameTime gameTime)
    {
        keyboard = Keyboard.GetState();
        mouse = Mouse.GetState();
        if (CheckKeyboard(Keys.Up))
        {
            if (selected > 0) selected--;
            else{selected = buttonList.Count - 1;}
        }
        if (CheckKeyboard(Keys.Down))
        {
            if (selected < buttonList.Count - 1) selected++;
            else {selected = 0;}
        }
        prevMouse = mouse;
        prevKeyboard = keyboard;
    }
    public bool CheckMouse()
    {
        return (mouse.LeftButton == ButtonState.Pressed && prevMouse.LeftButton == ButtonState.Released);
    }
    public bool CheckKeyboard(Keys key)
    {
        //Here is the only thing that needed to be changed, based on your original post
        //you were checking if both keys were down originally, meaning it was always 
        // true while a button was pressed. if the previous keyboard was down,
        //and the current keyboard is up, it means the button was released.
        return (keyboard.IsKeyUp(key) && prevKeyboard.IsKeyDown(key));
    }