2013-05-14 64 views
0

当我单击向下箭头时,它会卡住第二个选择,并且向上或向下不再起作用,我将如何解决该问题?XNA - 冻结菜单错误

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

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

回答

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

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()用于比较,它返回一个布尔值,告诉你元素是否相等,但它看起来像你用它来分配什么。

是你寻找类似

else 
    selected = 0; 

,而不是

else selected.Equals(0);