我正在制作一个简单的游戏,我使用以下代码来检测光标键:
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);
}
我还使用此代码来确定用户是否已发布过去预设的密钥:
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
StopRoomba();
}
我现在有两个问题:我想添加一个用户可以同时按下UP和RIGHT游标的情况,这样角色就会向上移动。如何在我的代码中检查这个条件?
也有一些奇怪的事情发生(或者它可能是一个默认系统)。我可以一次按下3个光标键,或者例如我按住向上键,然后按住向右键,同时仍然按住并按住向下按住向上和向右键,我的代码对所有三个代码作出反应。在下图中,您可以看到红色方向已被按下并被我的代码检测到(红色=按下):
我的第二个问题是MainForm_KeyUp
有时没有检测到密钥释放,而且角色会继续朝这个方向发展。
任何提示/帮助都会受到影响
答案 0 :(得分:3)
Keys是一个标记的枚举。这意味着您可以使用按位比较来查看是否同时按下了多个键。
case Keys.Up & Keys.Right:
...
break;
您还可以使用以下检查检查个别密钥:
if ((keyData & Keys.Up) == Keys.Up)
GoForward();
if ((keyData & Keys.Right) == Keys.Right)
GoRight();