2017-09-12 2 views
1

J'ai un petit problème de C# qui, je suis sûr, doit être facile à résoudre, mais je ne peux pas, pour la vie de moi, comprendre ce qui ne va pas.Renverser une valeur booléenne

J'ai un mode de débogage dans mon jeu qui est activé lorsqu'une valeur booléenne debugMode est définie sur true. La variable est stockée dans un objet gameInfo, référencé dans ma classe GameInfo. Je veux faire en sorte que je puisse activer et désactiver le mode de débogage en appuyant sur la touche "I" sur le clavier. Voici ce que j'ai essayé:

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

Le problème est que rien ne se passe lorsque j'appuie sur "I". Si je fais ce qui suit, je suis en mesure de désactiver le mode de débogage off donc je sais que l'idée fonctionne:

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

Est-ce que quelqu'un sait ce que je fais mal? Je peux bien sûr le résoudre en utilisant quelques instructions if pour transformer un vrai en un faux et vice versa, mais qu'il est long par rapport à la simple déclaration ci-dessus.

Merci beaucoup pour toute aide que vous pouvez offrir :)

+1

Quelle architecture utilisez-vous? –

+1

Je suis désolé mais je n'ai aucune idée de ce que vous voulez dire! Je suis assez inexpérimenté en programmation. –

+0

Il est inhabituel si le second échantillon que vous avez essayé fonctionne, pourriez-vous essayer quelque chose comme 'GameInfo.gameInfo.debugMode = GameInfo.gameInfo.debugMode? faux: vrai; '? –

Répondre

1

Cela ne vous oblige à avoir un autre drapeau, mais il empêchera l'événement clé d'être manipulé plusieurs fois à la fois.

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 merci! Cela a résolu mon problème, bien que je devais changer la dernière ligne à une condition if pour le faire fonctionner: if (keyboardState.IsKeyUp (Keys.I)) {keyPressRegistered = false;} –