簡體   English   中英

處理多個按鍵並檢測鍵盤事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM