2017-06-05 19 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

あなたの期待される動作は何ですか?ユーザーが「上」を押した後、「右」を押したことを検出しますか?または、同時にキーが押されたことを検出したいですか?質問を編集して詳細を入力してください。キー押下イベントでは1つのキーしか処理されず、2つのキーが押されていることを確認するため、この例は機能しません。 – 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; 
    } 
} 
関連する問題