2017-09-12 3 views
1

Ich habe ein kleines C# -Problem, das sicher leicht zu lösen sein muss, aber ich kann nicht für das Leben von mir herausfinden, was falsch ist.Spiegeln eines booleschen Wertes

Ich habe einen Debug-Modus in meinem Spiel, der eingeschaltet wird, wenn ein boolescher Wert debugMode auf True festgelegt ist. Die Variable wird innerhalb eines gameInfo Objekts gehalten, das in meiner GameInfo Klasse referenziert wird. Ich möchte es so einrichten, dass ich den Debug-Modus ein- und ausschalten kann, indem ich die "I" -Taste auf der Tastatur drücke. Hier ist, was ich versucht habe:

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

Das Problem ist, dass nichts passiert, wenn ich "I" drücke. Wenn ich die folgend ich in der Lage bin Debug-Modus off zu drehen, so weiß ich, die Idee funktioniert:

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

Weiß jemand, was ich falsch mache? Ich kann es natürlich lösen, indem ich ein paar if-Anweisungen verwende, um ein wahres in ein falsches umzuwandeln und umgekehrt, aber dass es im Vergleich mit der obigen einfachen Aussage langatmig ist.

Vielen Dank für jede Hilfe können Sie bieten :)

+1

Welche Architektur verwenden Sie? –

+1

Es tut mir leid, aber ich habe keine Ahnung, was du meinst! Ich bin ziemlich unerfahren mit dem Programmieren. –

+0

Es ist ungewöhnlich, wenn das zweite Beispiel, das Sie ausprobiert haben, funktioniert, könnten Sie etwas wie 'GameInfo.gameInfo.debugMode = GameInfo.gameInfo.debugMode versuchen? falsch: wahr; '? –

Antwort

1

Dieses Sie erfordert eine andere Flagge haben, aber es wird das Schlüsselereignis aus wird mehrmals behandelt sofort zu verhindern.

bool keyPressRegistered = false; 

... 

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

... 

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

Ahh danke! Das hat mein Problem gelöst, obwohl ich die letzte Zeile in eine if-Bedingung ändern musste, damit es funktionierte: if (keyboardState.IsKeyUp (Schlüssel.I)) {keyPressRegistered = false;} –

Verwandte Themen