Frage

Ich schreibe eine kleine Spiele -Engine - nur um zu verstehen, wie diese von innen funktionieren. Ich möchte derzeit nicht mit OpenGL oder DirectX anlegen, also halte ich mich daran, mit GDI+ und all diesen Gewinnen auf ein Steuerelement zu ziehen.

Offensichtlich muss ich die Eingaben verarbeiten. Insbesondere Tastaturereignisse. Dies ist jedoch ein Problem:

protected override void OnKeyDown(KeyEventArgs e)
{
    Trace.WriteLine(string.Format("KD {0:hh:MM:ss.fff} {1}", 
        DateTime.Now, e.KeyCode));
}

Dieser Code (auch mit der kürzesten Wiederholungsverzögerung im Tastatur -Applet im Bedienfeld) ist Folgendes:

KD 10:02:18.318 Right
KD 10:02:18.570 Right
KD 10:02:18.598 Right
KD 10:02:18.639 Right
KD 10:02:18.667 Right
KD 10:02:18.701 Right

Wie Sie sehen können, gibt es eine 0,25 Sek. Verzögerung zwischen den ersten beiden Ereignissen. Dies führt natürlich zu trägen Bewegungen von Objekten auf dem Bildschirm: Es bewegt sich zuerst leicht nach rechts, macht dann für einen spürbaren Moment innehalten und geht dann weiter.

Wie löste ich dieses Problem? Kann dies in reinen Winforms erfolgen oder sollte ich DirectInput (oder was auch immer die koschere Art heutzutage?) Wege gehen?

War es hilfreich?

Lösung

Die Verwendung von Windows -Nachrichten ist nicht der beste Weg für die Eingabeinteraktion.
Ich weiß nichts über WinForms, aber ich gehe davon aus, dass wichtige Ereignisse Nachrichten verwenden.

Ich habe DirectInput (V7) vor vielen Jahren verwendet und es war sehr schnell.
Vielleicht GetKeyboardstate oder GetaSynckeystate In einer Spielschleife sind gute Alternativen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top