2017-09-12 97 views
1

我有一個很小的C#問題,我確信它一定很容易解決,但是我不能爲了我的生活找出問題所在。翻轉一個布爾值

我在我的遊戲中有一個調試模式,當布爾值debugMode設置爲true時開啓。變量保存在gameInfo對象中,在我的GameInfo類中引用。我想使它可以通過按下鍵盤上的「I」鍵來打開和關閉調試模式。這是我的嘗試:

if (keyboardState.IsKeyDown(Keys.I)) 
     GameInfo.gameInfo.debugMode = !GameInfo.gameInfo.debugMode; 

問題是,當我按「我」時沒有任何反應。如果我這樣做,我能夠把調試模式關閉以下,所以我知道這個想法運作:

if (keyboardState.IsKeyDown(Keys.I)) 
      GameInfo.gameInfo.debugMode = false; 

有誰知道我做錯了嗎?當然,我可以通過使用幾個if語句來將它變爲false,反之亦然,但它與上面的簡單語句相比,它已經囉嗦了很多。

非常感謝任何幫助,您可以提供:)

+1

您使用哪種架構? –

+1

我很抱歉,但我不知道你的意思!我對編程相當缺乏經驗。 –

+0

如果您嘗試的第二個示例有效,那麼您是否可以嘗試類似'GameInfo.gameInfo.debugMode = GameInfo.gameInfo.debugMode? false:true;'? –

回答

1

但這需要你有另一個標誌,但它會防止關鍵事件從一次被處理多次。

bool keyPressRegistered = false; 

... 

if (keyboardState.IsKeyDown(Keys.I) && !keyPressRegistered) 
{ 
    keyPressRegistered = true; 
    GameInfo.gameInfo.debugMode = !GameInfo.gameInfo.debugMode; 
} 

... 

keyPressRegistered = !(keyPressRegistered && keyboardState.IsKeyUp(Keys.I)); 
+1

啊,謝謝!這已經解決了我的問題,儘管我必須將最後一行更改爲if條件才能使其工作:if(keyboardState。IsKeyUp(Keys.I)){keyPressRegistered = false;} –