Wie wird die Tastatureingabe in Programmen wie Spielen am besten gehandhabt? Ist die DirectX-Eingabe die einfachste Wahl? Was sind die anderen Optionen?
Antworten
Zu viele Anzeigen?DirectInput (wenn Sie das mit DirectX-Input meinen) ist veraltet. Ich persönlich finde es ausreichend, die an die WndProc des Hauptfensters gesendeten Nachrichten zu verarbeiten. Siehe WMINPUT , oder WMKEYDOWN y WMKEYUP
EDIT: Ich bin davon ausgegangen, dass du ein Spiel mit Directx entwickelst. Wenn nicht, hängt es wirklich davon ab, wie Sie Ihr Spiel erstellen, um die Eingabe zu wählen. Wenn du eine plattformübergreifende Bibliothek verwendest, wird sie eine Möglichkeit haben, Eingaben zu verarbeiten, die bereits eingebaut ist.
Alles, was DirectInput für die Tastatureingabe tut, ist das Erstellen eines Threads und das Beobachten der WM_*-Nachrichten sowie das Hinzufügen des Overheads des zusätzlichen Threads. Selbst Microsoft sagt, dass man nur die WM_*-Meldungen beobachten sollte. Ich sehe einige EPIC FAIL , nicht aber auf Seiten der Windows-Warteschlange.
Es hängt hauptsächlich davon ab, welches Framework/OS Sie für Ihr Spiel verwenden wollen.
Die Optionen sind zu zahlreich, um sie hier alle aufzuzählen, aber sie umfassen:
- XNA (Windows + XBox 360)
- DirectX (Windows)
- Flash (plattformübergreifend)
- Silverlight (sollte plattformübergreifend sein)
Verschiedene integrierte Spiel-Engines :
- Drehmoment
- Dunkle gdk
- ...
Plattformübergreifende Bibliotheken
- Allegro
- LWJGL
- ...
Ehrlich gesagt ist es sehr unwahrscheinlich, dass die Verarbeitung von Eingaben Ihr größtes Problem sein wird. Suchen Sie sich also eine Lösung aus, die Ihren Bedürfnissen entspricht (insbesondere in Bezug auf grafische Fähigkeiten/Komplexität) und wählen Sie von dort aus Ihre Art der Verarbeitung von Eingaben.
Normalerweise wählen Sie die Eingabehandlungsmethode, die am besten zu Ihrem Windowing-System passt. Wenn Sie GLUT/SDL/SFML oder eines der anderen Windowing-Toolkits verwenden, erhalten Sie Ihre Eingaben von ihnen. Andernfalls, wenn Sie Ihre eigene Rolling dann ist es zwischen der Verwendung der OS-Eingabe-Nachrichten oder DirectInput, die beide schwimmen für Spiele arbeiten.
Wenn Sie über Mauseingabe nachdenken, verwenden Sie NICHT DirectInput, es sei denn, Sie haben sehr spezifische Mausballistiken, die Sie anwenden wollen. Bei der Direkteingabe wird die Mausbewegung nicht mit der Mausballistik des Benutzers verknüpft (die über das Mausbedienfeld eingestellt wird) und wird sich für die meisten Benutzer sehr unangenehm anfühlen.
Mit DirectInput ist alles in Ordnung. Funktioniert gut und gibt Ihnen direkten Zugriff auf die Hardware über eine ... äh ... "freundliche" Schnittstelle :) Das Abfragen der Hardware ist der einzige Weg, wenn Sie echte Reaktionsfähigkeit in Ihrem Spiel wollen.
Sich auf die Windows-Nachrichtenpumpe zu verlassen und Windows-Nachrichten zu verarbeiten, ist imho eine EPIC FAIL .