2012-12-20 37 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(); 
相关问题