2017-06-05 45 views
0

使用KeyPressEventArgs我希望能夠檢測到多個按鍵。我沒有運氣就像這樣嘗試過。C#KeyPressEventArgs多個按鍵

[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; 
    } 
} 

任何人都可以幫助解決這個問題嗎?

+1

你的預期行爲是什麼?你想檢測用戶是否按下然後右鍵?還是你想要檢測到同時按下了鍵?請編輯您的問題並提供更多詳細信息。你的例子將不起作用,因爲在按鍵事件中只有一個鍵被處理,而你檢查的是兩個鍵被按下 - 這絕不會發生。 – Reniuz

+0

鍵同時按下 – Nulle

+0

現在,如果您在代碼中按下並右鍵,那麼該操作將首先按下該鍵。我希望它爲兩者採取行動。 – Nulle

回答

1

您應該處理您案件中的關鍵事件。這裏是代碼的基本思路你如何做到這一點:

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; 
    } 
}