2017-09-12 102 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;} –