2016-02-02 24 views
0

語言:C#菜單索引安其發行

說明: 所以目前我在做一個小遊戲的XNA。我正在爲遊戲創建一個菜單。我有3個菜單菜單狀態。 1 =選項菜單,2 =開始菜單,3 =加載菜單。所以目標是當用戶按下「D」鍵時菜單索引增加1,對於「A」鍵,菜單遞減。這個問題是使用XNA中的KeyDown更新每個Tick。所以當我增加/減少索引時,它會更新到更快的方式。我希望用戶能夠切換菜單而不會閃爍得非常快。以下是我的代碼,請讓我知道任何解決方案。

if(keyboard.IsKeyDown(Keys.D)) 
      { 
        LyEngine.Game.MENU_INDEX++; 
        if (LyEngine.Game.MENU_INDEX >= 3) 
        { 
         LyEngine.Game.MENU_INDEX = 1; 
        } 

      } 
      else if (keyboard.IsKeyDown(Keys.A)) 
      { 
       LyEngine.Game.MENU_INDEX--; 
       if (LyEngine.Game.MENU_INDEX <= 1) 
       { 
        LyEngine.Game.MENU_INDEX = 3; 
       } 
      } 

回答

1

而是當一個鍵被按下,改變菜單索引的需要捕獲一個鍵一個刻度往上衝,然後鍵爲落於下之間的過渡。

要做到這一點,將密鑰保存狀態的前值,並把它添加到您的條件:

if(keyboard.IsKeyDown(Keys.D) && !keyWasDown[Keys.D]) 
{ 
    // ... 
} 
keyWasDown[Keys.D] = keyboard.IsKeyDown(Keys.D) 

你必須創建字典keyWasDown存儲之前的狀態。

+2

爲了將來的使用,不必將單個鍵保存在字典中,只需保存上一次更新中的整個鍵盤狀態即可。這樣,當您突然想要開始監控新密鑰時,您不必做任何更改。 – Falgantil

+0

是的,@BjarkeSøgaard,它在工作之後是一個很好的重構。 –

+0

如果我有多個項目,但不僅僅是3個,那麼呢? –