Во-первых, игровые контроллеры SDL являются продолжением джойстиков SDL (для контекста этого ответа, когда я говорю «контроллер» или «джойстик», я имею в виду реализацию SDL, а не категорию аппаратных устройств в целом). Как говорит вики ,
Эта категория содержит функции для управления игровыми контроллерами и для
сопоставление джойстиков с семантикой игрового контроллера. Это построено на вершине
существующего API джойстика.
Если вы запускаете игру из Steam, отображение игрового контроллера
автоматически предоставляется для вашей игры.
Внутренне SDL использует радостные события и обрабатывает их для создания событий игрового контроллера в соответствии с отображением контроллера. Следовательно, можно сказать, что джойстик - это вещь более низкого уровня, в то время как игровой контроллер - это обобщение на джойстиках, чтобы производить более предсказуемые / совместимые (но более ограниченные) для игр, которым нужны устройства ввода, подобные геймпаду.
С игровым контроллером вы можете запрограммировать ввод только для одного xbox-подобного контроллера, и SDL сделает пользовательский контроллер совместимым с этим (иногда с помощью пользователя - слишком много разных контроллеров, мы не можем ожидать SDL, чтобы иметь конфигурации для всех из них). Конечно, если контроллер сильно отличается (или не является контроллером вообще - например, мухи для упрощения, колеса и т. Д.), Это будет проблематично.
По сути, игровой контроллер предоставляет xbox-подобные кнопки и оси для пользователя, освобождая разработчика приложений от необходимости поддерживать переназначение контроллера - так как переназначение выполняется в самом SDL. Для некоторые популярные контроллеры SDL уже имеют встроенные отображения, а для других определяемое пользователем отображение может быть загружено через переменную среды .
Существует также инструмент конфигурирования , который упрощает переназначение для конечного пользователя, включая экспорт полученной конфигурации в указанную переменную среды. Steam также имеет встроенный инструмент конфигурации, который конфигурирует его (предположительно - я никогда не использовал это) экспортирует в SDL - по сути, что делает самих пользователей ответственными за настройку своих контроллеров.