冻结菜单错误
本文关键字:错误 菜单 冻结 | 更新日期: 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));
}