Несколько нажатий клавиш делают разные события в C # - PullRequest
3 голосов
/ 21 апреля 2010

private void Form1_KeyDown (отправитель объекта, KeyEventArgs e) {if (e.KeyCode == Keys.W) player1.moveUp ();if (e.KeyCode == Keys.NumPad8) player2.moveUp ();}

В приведенном выше коде методы moveUp в основном просто увеличивают значение.Я хочу, чтобы обе клавиши могли быть нажаты (или удержаны) одновременно, и оба события сработают.Спасибо, Невик

Ответы [ 2 ]

4 голосов
/ 21 апреля 2010

Получить состояние клавиатуры и проверить состояние клавиш, которые вы хотите.

События не лучший способ пойти в играх. Вам нужен более быстрый ответ.

[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;
}


Дополнительные ссылки.

По сути, они уже доступны в сети. Попробуйте поискать, прежде чем спрашивать. Это будет быстрее:)

2 голосов
/ 21 апреля 2010

Предположим, у вас есть «игровой цикл», который обновляет объект, который вы перемещаете с помощью клавиатуры. Событие KeyDown должно изменить состояние объекта на «движение вверх». И ваш цикл при каждом запуске дает ему новые позиции.

Событие KeyUp должно изменить состояние обратно на «бездействующее». Если состояние все еще «движется вверх».

Теперь вы больше не зависите от повторения нажатия клавиши для сохранения движения объекта. И не будет проблем с проигрывателем, нажимающим несколько клавиш одновременно.

...