Registriert: Di Jun 12, 2012 21:26 Beiträge: 112
Programmiersprache: Delphi
Hallo Leute,
ich frage mich, welche Möglichkeiten es gibt, in Delphi die Steuerung über einen Joystick/ein Gamepad zu unterstützen. Im Netz habe ich einige Beispiele mit MMSystem gefunden. Da jedoch MMSystem eines meiner Gamepads nicht erkennen wollte (und alle anderen Programme damit keine Probleme hatten), nutze ich im Moment SDL. Ich hatte mit MMSystem bereits in anderen Bereichen Probleme, und bin daher etwas abgeneigt, MMSystem zu verwenden. Eine gute Alternative wäre Direct Input. Allerdings streube ich mich davor, Direct Input in Verbindung mit OpenGL zu nutzen. Gibt es noch weitere Möglichkeiten?
Die aktuelle Variante heißt XInput, welches auch Dinge wie Rumble unterstützt. Zumindest mein Gamepad emuliert im DirectInput-Modus nur eine Tastatur, d.h keine analogen Sticks und kein Rumble. Diese Schnittstelle ist Teil des DirectX SDK. Als Programmierer benutzt habe ich XInput aber bisher nicht.
Zitat:
Allerdings streube ich mich davor, Direct Input in Verbindung mit OpenGL zu nutzen.
Ich sehe da kein Problem. Du musst eben nicht das ganze DirectX SDK initialisieren, sondern nur den Teil den du brauchst.
Registriert: Di Jun 12, 2012 21:26 Beiträge: 112
Programmiersprache: Delphi
Danke für Deine Antwort. Bin heute über die HID-Komponente die der JVCL beiliegt gestolpert. Ich denke, das wäre vielleicht noch eine Alternative. Der erste Eindruck war zumindest ganz gut. Werde mich mal in XInput und/oder die Komponente einarbeiten. Mit SDL war es wesentlich einfacher , aber wenn ich von SDL unabhängig sein möchte...
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
So bist du von XInput bzw. der JVCL abhängig. Beides ist (im gegensatz zu OpenGL) nur auf Windows zuverlässig verfügbar. Ist das besser als SDL?
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Jun 12, 2012 21:26 Beiträge: 112
Programmiersprache: Delphi
Lord Horazont hat geschrieben:
So bist du von XInput bzw. der JVCL abhängig. Beides ist (im gegensatz zu OpenGL) nur auf Windows zuverlässig verfügbar.
Da hast Du recht. Im Moment tendiere ich auch eher wieder zu SDL. Deshalb entwickle ich mein aktuelles Projekt so, dass es sich ohne zusätzlichen Arbeitsaufwand in einer VCL-Version (ohne SDL) und einer SDL-Version compilieren lässt. Dank OpenGL ist das zum Glück leicht möglich. Auch die Joystick-Unterstützung durch SDL habe ich so gestaltet, dass sie ohne Probleme austauschbar ist. Bin noch unentschlossen
Ich wollte einfach mal sehen, was es für weitere Möglichkeiten außer SDL gibt. XInput und die HID-Komponente machen (zumindest) auf den ersten Blick einen recht komplexen Eindruck, also viel Einarbeitungszeit. Und Joystick/Gamepad-Unterstützung ist für mich, der mit Konsolen aufgewachsen ist, ein absolutes Muss
Registriert: Di Jun 12, 2012 21:26 Beiträge: 112
Programmiersprache: Delphi
end hat geschrieben:
Was bringen zwei unterschiedliche Versionen?
Nichts. Ich war mir nur nicht sicher, ob SDL sauber läuft. Hatte kleine Probleme mit verschiedenen DLL's. Aus diesem Grund möchte ich mir einfach die Möglichkeit offenlassen, die VCL-Variante ohne Mehrarbeit nutzen zu können. Für die Programmierung bringt mir das im Moment keine Nachteile. Generell tendiere ich, wie schon geschrieben, sehr dazu zu SDL zurückzukehren
Registriert: Di Jun 12, 2012 21:26 Beiträge: 112
Programmiersprache: Delphi
Ist zwar schon eine ganze Weile her, aber hier mein Fazit:
Die HID-Komponente ist super, hat aber einen sehr großen Nachteil: Sie benutzt zum Einlesen einen Timer. Dadurch enstanden letztendlich Probleme beim Lesen der Eingabe. Die Dokumentation ist dürftig. Deshalb habe ich sehr lange gebraucht, um zu verstehen wie das Einlesen des Gamepads/Joysticks funktioniert. Wenn man weiss wie es geht, ist die Implementierung jedoch sehr einfach. Außerdem werden natürlich nur USB-Gamepads unterstützt (wobei das heutzutage vermutlich Standard ist). Interssant ist die Komponente vorallem wenn man andere Eingabegeräte nutzt (Lightgun oder ähnliches)
Bei DirectInput hatte ich das Probleme, dass es nicht alle meine Gamepads erkannt hat. Naja, lag vielleicht auch an meiner Implementierung.
XInput habe ich nie ausprobiert.
Am einfachsten ist es meiner Meinung nach eben immer noch, SDL zu nutzen. Hatte damit bisher nie Probleme.
Mitglieder in diesem Forum: 0 Mitglieder und 43 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.