3 Stimmen

Mehrere Tastendrücke mit unterschiedlichen Ereignissen in C#

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

Im obigen Code erhöhen die moveUp-Methoden im Grunde nur einen Wert. Ich möchte es, so dass beide Tasten gedrückt werden können (oder gedrückt gehalten) zur gleichen Zeit und beide Ereignisse auslösen wird. Vielen Dank! Nevik

4voto

Nayan Punkte 2976

Ermitteln Sie den Status der Tastatur und prüfen Sie den Status der gewünschten Tasten.

Events sind nicht der beste Weg, um Spiele zu machen. Sie brauchen eine schnellere Reaktion.

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

Ein anderer Weg, entnommen aus aquí ,

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

Weitere Links.

Im Grunde sind diese bereits im Netz verfügbar. Versuchen Sie zu suchen, bevor Sie fragen. Es wird schneller gehen :)

2voto

Hans Passant Punkte 894572

Nehmen wir an, Sie haben eine "Spielschleife", die das Objekt, das Sie mit der Tastatur bewegen, aktualisiert. Das KeyDown-Ereignis sollte den Zustand des Objekts auf "Aufwärtsbewegung" ändern. Und Ihre Schleife gibt ihm dann bei jedem Durchlauf neue Positionen.

Das KeyUp-Ereignis sollte den Zustand wieder auf "Leerlauf" ändern. Wenn der Zustand immer noch "aufwärts" ist.

Sie sind nun nicht mehr auf die Wiederholung eines Tastendrucks angewiesen, um das Objekt in Bewegung zu halten. Und Sie haben keine Probleme mehr, wenn der Spieler mehrere Tasten gleichzeitig drückt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X