2017-06-05 5 views
0

Utilisation de KeyPressEventArgs Je souhaite pouvoir détecter plusieurs pressions de touches. Je l'ai essayé comme ça sans chance.C# KeyPressEventArgs Multiple Keypress

[GLib.ConnectBefore] 
public override void OnKeyPress (object o, global::Gtk.KeyPressEventArgs args) 
{ 
    if ((args.Event.Key == Gdk.Key.Up) && (args.Event.Key == Gdk.Key.Right)) 
    { 
     playerPhysics.AddVector (_taxiGoUp); 
     Player._state = Taxi.State.MoveUp; 
     playerPhysics.AddVector (_taxiGoRight); 
     Player._state = Taxi.State.MoveRight; 
    } 
} 

Quelqu'un peut-il aider à comprendre cela?

+1

Quelle est votre comportement attendu? Voulez-vous détecter l'utilisateur a-t-il appuyé vers le haut puis vers la droite? Ou voulez-vous détecter que les touches sont pressées en même temps? S'il vous plaît modifier votre question et mettre plus de détails. Votre exemple ne fonctionnera pas parce que sur l'événement de presse de clé seulement une clé est manipulée et vous vérifiez que 2 clés sont pressées - ceci n'arrivera jamais. – Reniuz

+0

touches en même temps – Nulle

+0

maintenant si vous appuyez vers le haut et à droite dans mon code puis l'action sera prise pour la touche qui a été pressée en premier. Je veux qu'il agisse pour les deux. – Nulle

Répondre

1

Vous devez gérer les événements d'activation et de désactivation des touches dans votre boîtier. Voici le code pour idée de base comment vous pourriez le faire:

bool keyRight = false; 
bool keyUp = false; 

[GLib.ConnectBefore] 
public override void OnKeyDown (object o, global::Gtk.KeyDownEventArgs args) 
{ 
    switch (args.Event.Key) 
    { 
     case Gdk.Key.Up: 
     if(!keyUp) 
     { 
      keyUp = true; 
      playerPhysics.AddVector (_taxiGoUp); 
      Player._state = Taxi.State.MoveUp;    
     } 
     break; 
     case Gdk.Key.Right: 
     if(!keyRight) 
     { 
      keyRight = true; 
      playerPhysics.AddVector (_taxiGoRight); 
      Player._state = Taxi.State.MoveRight;    
     } 
     break; 
    } 
} 

[GLib.ConnectBefore] 
public override void OnKeyDown (object o, global::Gtk.KeyUpEventArgs args) 
{ 
    switch (args.Event.Key) 
    { 
     case Gdk.Key.Up: 
     keyUp = false; 
     break; 
     case Gdk.Key.Right: 
     keyRight = false; 
     break; 
    } 
}