Was ist SDL_Joystick und was ist SDL_GameController? Welche Beziehungen bestehen zwischen den beiden?

Lesezeit: 4 Minuten

Benutzeravatar von tom_mai78101
tom_mai78101

Was ist die Beziehung zwischen SDL_Joystick und SDL_GameController? Das sind die einzigen Dinge, die ich jetzt weiß:

  • SDL_GameController und verwandte Funktionen sind alle Teil einer neuen API, die in SDL2 eingeführt wurde.
  • SDL_GameController und verwandte Funktionen bauen auf den bestehenden auf SDL_Joystick API.
  • (Arbeitsentwurf) Sie können eine Instanz von erhalten SDL_Joystick durch Aufruf der Funktion SDL_GameControllerGetJoystick() und Übergabe in einer Instanz von SDL_GameController.
  • (Arbeitsentwurf) Sie können eine Instanz von erhalten SDL_GameController zunächst durch Anruf SDL_JoystickInstanceID() und Übergabe in einer Instanz von SDL_Joystickdann pass in die SDL_JoystickID zu SDL_GameControllerFromInstanceID.

Obwohl SDL_Joystick und SDL_GameController sind beide austauschbar, wie es scheint SDL_GameController ist hier, um das zu ersetzen und langsam zu gelingen SDL_Joystick.

Grund ist, beim Polling für SDL_EventDie SDL_Event Instanz enthält sowohl die SDL_Event::jbutton und SDL_Event::cbutton Strukturen, die die darstellen SDL_Joystick Tasten und SDL_GameController Schaltflächen bzw. Ich denke, ich kann entweder einen oder beide Button-Events für die Player-Steuerung verwenden.

Ich könnte mich hier irren.

Ich würde gerne fragen:

  • Was sind die Unterschiede zw SDL_Joystick und SDL_GameController?
  • Ist SDL_Joystick bezieht sich jetzt auf diesen Controller?

    Geben Sie hier die Bildbeschreibung ein

    Und das gleiche für SDL_GameController?

    Geben Sie hier die Bildbeschreibung ein

  • Was sind die Vorteile/Nachteile der Verwendung SDL_Joystick über SDL_GameController (und umgekehrt)?

  • Deine Beschreibung klingt genau richtig. Der Joystick ist etwas niedriger – es gibt Knöpfe, Achsen und Hütten, aber er kann jede Konfiguration darstellen. Das Gamepad ist viel eingeschränkter, da die SDL-Implementierung dem Xbox-Gamepad nachempfunden ist (z. B. durch Ausleihen von Tastennamen), aber es passt zu gängigen Gamepad-Modellen und verfügt sogar über eine Datenbank mit Voreinstellungen und Konfigurationstools um einige seltsame Gamepads neu zuzuordnen. Auf diese Weise können Sie Annahmen über Achsen/Schaltflächen treffen, während der Benutzer das Remapping-Tool verwenden kann, um es zu konfigurieren.

    – Kelter

    25. April 2018 um 13:59 Uhr

  • @keltar Also, wenn ich mir die SDL-Implementierung wie ein objektorientiertes C++-Design vorstellen würde, SDL_Joystick ist die übergeordnete Klasse von SDL_GameController?

    – tom_mai78101

    25. April 2018 um 14:06 Uhr


  • In gewisser Weise ja. Es sucht nach Joystick-Ereignissen und generiert daraus Gamecontroller-Ereignisse.

    – Kelter

    25. April 2018 um 14:59 Uhr

  • @keltar Danke. Ich habe dieses Zitat auch an anderer Stelle bei Google gefunden, aber ich habe den Link verloren. Es sagte If you use SDL_GameController in a game instead SDL_Joystick, you'll have the same button mapping on every device you port your game on. Ist das wahr?

    – tom_mai78101

    25. April 2018 um 15:11 Uhr

  • Ja und nein. SDL hat integrierte Mappings für gängige Modelle, aber der Teil „jedes Gerät“ ist unrealistisch. Benutzer selbst können jedoch ihre Gerätezuordnung konfigurieren (und sie auf Wunsch für andere zur Verwendung hochladen), ohne das Spiel zu ändern, da Neuzuordnungsdateien über Umgebungsvariablen geladen werden können. In gewissem Sinne können Sie das Problem der Neuzuordnung also ignorieren und es an die Endbenutzer selbst delegieren.

    – Kelter

    25. April 2018 um 15:17 Uhr

Zunächst einmal sind SDL-Gamecontroller die Erweiterung der SDL-Joysticks (im Rahmen dieser Antwort meine ich mit „Controller“ oder „Joystick“ die Implementierung von SDL, nicht die Kategorie der Hardwaregeräte im Allgemeinen). Als wiki sagt,

Diese Kategorie enthält Funktionen zum Umgang mit Gamecontrollern und zum Zuordnen von Joysticks zur Gamecontroller-Semantik. Dies baut auf der vorhandenen Joystick-API auf.

Wenn Sie Ihr Spiel über Steam ausführen, wird die Gamecontroller-Zuordnung automatisch für Ihr Spiel bereitgestellt.

Intern SDL Verwendet Joystic-Ereignisse und verarbeitet sie, um Game-Controller-Ereignisse gemäß der Controller-Zuordnung zu erzeugen. Daher kann man sagen, dass Joystic eine Sache auf niedrigerem Niveau ist, während Gamecontroller eine Verallgemeinerung auf Joysticks sind, um vorhersehbarere/kompatiblere (aber eingeschränktere) Spiele für Spiele zu produzieren, die Gamepad-ähnliche Eingabegeräte benötigen.

Mit Gamecontrollern können Sie Eingaben für nur einen Xbox-ähnlichen Controller programmieren, und SDL macht den Controller des Benutzers damit kompatibel (manchmal mit Hilfe des Benutzers – es gibt viel zu viele verschiedene Controller, die wir von SDL unmöglich erwarten können Konfigurationen für alle). Natürlich wäre es problematisch, wenn der Controller sehr unterschiedlich ist (oder überhaupt kein Controller – z. B. Flugsimulationsstäbe, Räder usw.).

Grundsätzlich bietet der Gamecontroller Xbox-ähnliche Schaltflächen und Achsen für die Benutzerseite, wodurch Anwendungsentwickler von der Notwendigkeit befreit werden, die Controller-Neuzuordnung zu unterstützen – da die Neuzuordnung in SDL selbst erfolgt. Für Einige beliebte Controller SDL hat bereits eingebaute Zuordnungen, und für andere können benutzerdefinierte Zuordnungen über geladen werden Umgebungsvariable.

Da ist auch ein Konfigurationstool Dies vereinfacht die Neuzuordnung für den Endbenutzer, einschließlich des Exports der resultierenden Konfiguration in die Umgebungsvariable. Steam hat auch ein eingebautes Konfigurationstool, dessen Konfiguration es (angeblich – ich habe das nie benutzt) nach SDL exportiert – im Wesentlichen macht es die Benutzer selbst für die Konfiguration ihrer Controller verantwortlich.

1437620cookie-checkWas ist SDL_Joystick und was ist SDL_GameController? Welche Beziehungen bestehen zwischen den beiden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy