3

private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.W) player1.moveUp(); if (e.KeyCode == Keys.NumPad8) player2.moveUp(); }

在上面的代码中, moveUp 方法基本上只是增加一个值。我想要它,以便可以同时按下(或按住)两个键,并且两个事件都会触发。谢谢,内维克

4

2 回答 2

4

获取键盘状态并检查所需按键的状态。

事件不是游戏的最佳方式。您需要更快的响应。

[DllImport("user32.dll")]
public static extern int GetKeyboardState(byte [] lpKeyState);
...
byte[] bCharData = new byte[256];
GetKeyboardState(bCharData);


另一种方式,取自这里

[DllImport("user32.dll")]
static extern short GetKeyState(VirtualKeyStates nVirtKey);
...
public static bool IsKeyPressed(VirtualKeyStates testKey)
{
    bool keyPressed = false;
    short result= GetKeyState(testKey);

    switch (result)
    {
        case 0:
            // Not pressed and not toggled on.
            keyPressed = false;
            break;

        case 1:
            // Not pressed, but toggled on
            keyPressed = false;
            break;

        default:
            // Pressed (and may be toggled on)
            keyPressed = true;
            break;
    }

    return keyPressed;
}


更多链接。

基本上,这些已经在网上提供。在询问之前尝试搜索。它会更快:)

于 2010-04-21T19:46:44.617 回答
2

假设您有一个“游戏循环”,可以更新您使用键盘移动的对象。KeyDown 事件应将对象状态更改为“向上移动”。然后你的循环每次运行时都会给它新的位置。

KeyUp 事件应将状态更改回“空闲”。如果状态仍在“向上移动”。

您现在不再依赖于重复击键来保持对象移动。并且玩家同时按下多个键不会有任何问题。

于 2010-04-21T19:55:23.360 回答