Wozu DirectInput?
-
Hi, helft mir bitte mal auf die Sprünge..
Was ich an DirectX nicht verstehe ist DI.
Wozu braucht man das überhaupt? Der einzige sinnvolle Grund ist doch das die Hardware nicht durch Windows gemapped wird, und man Zugriff auf etwas speziellere Hardware und deren Features hat (Joystick, Force Feedback, Mäuse mit mehr als 2 Tasten).Also Sachen wie die nichtlineare Mausbeschleunigung und vertauschen der Mausbuttons keinen Einfluss haben. Seh ich das richtig?
Bei Spielen wo es also nicht auf schnelle Mausbewegungen (Mausbeschleunigung) ankommt, und wo man auch kein FF oder Joystick braucht kann man sich DI für die Maus wohl sparen? Ein Beispiel wär für Strategiegames á la C&C oder Rollenspiele wie Baldurs Gate, oder nicht?
Was bei der Maus klar ist ist es bei der Tastatur jedoch längst nicht.
Da gibts ja keine "Tastenbeschleunigung". Gut, es gibt ne Wiederholrate, sofern man aber den Status pollt sollte das ja nicht von Interresse sein (Stichwort GetAsyncKeyState nicht über Messages).Apropos Polling..
Meint ihr est ist sinnvoller/einfacher zu pollen, oder die Eingabe über Events zu realisieren?Eure Meinungen bzw. Erfahrungen dazu?
-
wsad schrieb:
Was ich an DirectX nicht verstehe ist DI.
Wozu braucht man das überhaupt? Der einzige sinnvolle Grund ist doch das die Hardware nicht durch Windows gemapped wird, und man Zugriff auf etwas speziellere Hardware und deren Features hat (Joystick, Force Feedback, Mäuse mit mehr als 2 Tasten).
Also Sachen wie die nichtlineare Mausbeschleunigung und vertauschen der Mausbuttons keinen Einfluss haben. Seh ich das richtig?
Bei Spielen wo es also nicht auf schnelle Mausbewegungen (Mausbeschleunigung) ankommt, und wo man auch kein FF oder Joystick braucht kann man sich DI für die Maus wohl sparen? Ein Beispiel wär für Strategiegames á la C&C oder Rollenspiele wie Baldurs Gate, oder nicht?Jo, so sehe ich das auch.
wsad schrieb:
Apropos Polling..
Meint ihr est ist sinnvoller/einfacher zu pollen, oder die Eingabe über Events zu realisieren?
Eure Meinungen bzw. Erfahrungen dazu?Events sind sinnvoller, weil Du beim Polling immer nur den momentanen Zustand des Geräts bekommst. Angenommen Du schreibst eine grafische Benutzeroberfläche, wo der Benutzer Text in ein Textfeld eingeben kann. Da ist es sehr wichtig, dass alle Tastendrücke in der richtigen Reihenfolge verarbeitet werden. Beim Polling allein geht das nicht.
Du kannst aus den gesammelten Events aber immer noch sowas wie ein Polling-Array machen. Nur umgekehrt geht es nicht, weil einfach Eingaben verloren gehen können, wenn der Benutzer eine Taste nur zwischen zwei Pollings drückt.
-
TomasRiker schrieb:
Events sind sinnvoller, weil Du beim Polling immer nur den momentanen Zustand des Geräts bekommst. Angenommen Du schreibst eine grafische Benutzeroberfläche, wo der Benutzer Text in ein Textfeld eingeben kann. Da ist es sehr wichtig, dass alle Tastendrücke in der richtigen Reihenfolge verarbeitet werden. Beim Polling allein geht das nicht.
Du kannst aus den gesammelten Events aber immer noch sowas wie ein Polling-Array machen. Nur umgekehrt geht es nicht, weil einfach Eingaben verloren gehen können, wenn der Benutzer eine Taste nur zwischen zwei Pollings drückt.Ok, aber wie Events benutzen wenn nicht DI?

Über die WindowsMSGs?
-
Ja, das geht.
WM_KEYDOWN
WM_KEYUP
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_RBUTTONDOWN
WM_RBUTTONUP
WM_MOUSEMOVE
-
Ok, danke für die Antwort.
Noch jmd Meinungen zu?
-
@TomasRiker: Man kann doch alles buffered abfragen, dann kann auch nix verloren gehen - abgsehen davon, dass man heutzutage sowieso schon derart oft pollen kann, dass nahezu nichts verloren wird. Warum also die langsame Windows-Alternative benützen?
MfG SideWinder
-
IMHO ist das System mit den Events nicht langsamer. Was passiert? Ich drücke Taste, Interrupt wird ausgelöst, Windows bestimmt die Anwendung mit Fokus und reiht in die Message-Queue ein. Eigentlich kein Act, zumal die Messages immer an deine Anwendung gegeben werden und du deshalb immer mindestens die Queue regelmäßig leeren solltest. Dann kannst du Messages verwenden auch noch gleich.
-
SideWinder schrieb:
@TomasRiker: Warum also die langsame Windows-Alternative benützen?
Ich habe nicht gesagt, dass man das Windows-System benutzen soll, aber der Original-Poster wollte ja scheinbar auf DirectInput verzichten.
SideWinder schrieb:
Man kann doch alles buffered abfragen, dann kann auch nix verloren gehen
Genau das meine ich ja auch. Buffered = Event-basierend, ob jetzt unter DirectInput oder mit Windows-Messages.
SideWinder schrieb:
abgsehen davon, dass man heutzutage sowieso schon derart oft pollen kann, dass nahezu nichts verloren wird
Einen Framerate-Einbruch kann es immer einmal geben, und es wäre doch nicht gut, wenn ein Mausklick verpasst würde. Zudem hat man bei den gepufferten DirectInput-Daten den Vorteil, dass man den genauen Zeitpunkt des Events noch mitgeliefert bekommt.
-
TomasRiker schrieb:
Ich habe nicht gesagt, dass man das Windows-System benutzen soll, aber der Original-Poster wollte ja scheinbar auf DirectInput verzichten.
Nur scheinbar. Ich hab Anfangs einfach gefragt ob DI besondere Vorteile hat, die man bei Spielen mit "normaler" Steuerung gebrauchen kann.