![](/img/trans.png)
[英]Handling same event in more than one states in Workflow Foundation
[英]Handling more than one keypress and detecting keyup event
我正在制作一個簡單的游戲,我使用以下代碼來檢測光標鍵:
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
有時不檢測鍵釋放,並且角色繼續朝着方向前進。
任何提示/幫助都會受到關注
Keys是一個標記的枚舉。 這意味着您可以使用按位比較來查看是否同時按下了多個鍵。
case Keys.Up & Keys.Right:
...
break;
您還可以使用以下檢查檢查各個鍵:
if ((keyData & Keys.Up) == Keys.Up)
GoForward();
if ((keyData & Keys.Right) == Keys.Right)
GoRight();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.