2013-05-14 50 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);