2012-12-20 36 views
1

我想提出一個簡單的遊戲,我使用下面的代碼來檢測光標鍵:處理一個以上的按鍵和檢測keyup事件

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (Connection == null || Connection.IsOpen == false) 
     return true; 

    Thread.Sleep(SleepTime); 

    switch (keyData) 
    { 
     case Keys.Up: 
      GoForward(); 
      return true; 

     case Keys.Right: 
      GoRight(); 
      return true; 

     case Keys.Left: 
      GoLeft(); 
      return true; 

     case Keys.Down: 
      GoBackward(); 
      return true; 

     case Keys.Space: 
      Beep(); 
      return true; 
    } 

    return base.ProcessCmdKey(ref msg, keyData); 
} 

我也用這個代碼弄清楚,如果用戶已經發布perviously presed鍵:

private void MainForm_KeyUp(object sender, KeyEventArgs e) 
{ 
    StopRoomba(); 
} 

我現在有2個問題:我要添加情況下用戶可以同時向上和向右光標按例如這樣的字符上升右。我如何在我的代碼中檢查這種情況?

還有一些奇怪的事情發生(或者也許它是一個默認系統)。我可以一次按下3個光標鍵,例如我按住UP鍵,然後按住RIGHT鍵同時按住UP和RIGHT,同時按住DOWN鍵,我的代碼會對所有三個代碼作出反應。在圖片下面你可以看到紅色的方向已經按下並獲得通過我的代碼檢測(紅色=按下):

enter image description here

我的第二個問題是,MainForm_KeyUp有時沒有檢測鍵釋放和角色繼續朝着方向前進。

任何提示/幫助將被設定爲

回答

3

Keys是一個被標記的枚舉。這意味着您可以使用按位比較來查看是否同時按下多個鍵。

case Keys.Up & Keys.Right: 
    ... 
    break; 

您還可以檢查使用檢查類似下面的各個鍵:

if ((keyData & Keys.Up) == Keys.Up) 
    GoForward(); 
if ((keyData & Keys.Right) == Keys.Right) 
    GoRight(); 
相關問題