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 に答える