如何在WinForms中使用键盘对角移动字符?

s1ag04yj  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(122)

我的角色只能水平和垂直移动。我希望程序同时捕捉两个击键,而不仅仅是一个。我使用WinForms。

protected override void OnKeyDown(KeyEventArgs e)
{
    if (e.KeyCode == Keys.A)
        Player.Move(Direction.Left);
    if (e.KeyCode == Keys.D)
        Player.Move(Direction.Right);
    if (e.KeyCode == Keys.W)
        Player.Move(Direction.Up);
    if (e.KeyCode == Keys.S)
        Player.Move(Direction.Down);
    Invalidate();
}
disbfnqx

disbfnqx1#

您可以使用GetKeyState方法获得关键状态:

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern short GetKeyState(int keyCode);
public const int KEY_PRESSED = 0x8000;
public static bool IsKeyDown(Keys key)
{
    return Convert.ToBoolean(GetKeyState((int)key) & KEY_PRESSED);
}

使用IsKeyDown(Keys.A)检查键状态时,如果在检查状态时按下键,则该方法返回true
然后,在每个按键事件中,您可以检查A、W、D、S的按键状态。您可以将这些按键Map到二进制数中的位置,并根据下表计算有效组合:

|S|D|W|A| Number | Direction | 
------------------------------
|0|0|0|1| 1      | ←         |
|0|0|1|0| 2      | ↑         |
|0|0|1|1| 3      | ↖         |
|0|1|0|0| 4      | →         |
|0|1|1|0| 6      | ↗         |
|1|0|0|0| 8      | ↓         |
|1|0|0|1| 9      | ↙         |
|1|1|0|0| 12     | ↘         |
    • 示例**

下面的例子假设表单上有一个标签,我们想用A,W,D,S键移动标签:

一个二个一个一个

相关问题