Что такое SDL_Joystick и что такое SDL_GameController? Каковы отношения между двумя? - PullRequest
0 голосов
/ 25 апреля 2018

Какая связь между SDL_Joystick и SDL_GameController? Это единственное, что я знаю сейчас:

  • SDL_GameController и связанные функции являются частью нового API, введенного в SDL2.
  • SDL_GameController и связанные функции построены на основе существующего SDL_Joystick API.
  • (рабочий проект) Вы можете получить экземпляр SDL_Joystick, вызвав функцию SDL_GameControllerGetJoystick() и передав экземпляр SDL_GameController.
  • (рабочий проект) Вы можете сначала получить экземпляр SDL_GameController, вызвав SDL_JoystickInstanceID() и передав экземпляр SDL_Joystick, а затем передав SDL_JoystickID SDL_GameControllerFromInstanceID.

Несмотря на то, что SDL_Joystick и SDL_GameController являются взаимозаменяемыми, похоже, что SDL_GameController здесь, чтобы заменить и медленно заменить SDL_Joystick.

Причина в том, что при опросе SDL_Event экземпляр SDL_Event содержит структуры SDL_Event::jbutton и SDL_Event::cbutton, представляющие кнопки SDL_Joystick и SDL_GameController соответственно. Полагаю, я могу использовать одно или оба события кнопки для управления плеером.

Я могу ошибаться.

Я хотел бы спросить:

  • В чем различия между SDL_Joystick и SDL_GameController?
  • Обозначает ли SDL_Joystick этот контроллер?

    enter image description here

    И то же самое для SDL_GameController?

    enter image description here

  • Каковы преимущества / недостатки использования SDL_Joystick перед SDL_GameController (и наоборот)?

1 Ответ

0 голосов
/ 25 апреля 2018

Во-первых, игровые контроллеры SDL являются продолжением джойстиков SDL (для контекста этого ответа, когда я говорю «контроллер» или «джойстик», я имею в виду реализацию SDL, а не категорию аппаратных устройств в целом). Как говорит вики ,

Эта категория содержит функции для управления игровыми контроллерами и для сопоставление джойстиков с семантикой игрового контроллера. Это построено на вершине существующего API джойстика.

Если вы запускаете игру из Steam, отображение игрового контроллера автоматически предоставляется для вашей игры.

Внутренне SDL использует радостные события и обрабатывает их для создания событий игрового контроллера в соответствии с отображением контроллера. Следовательно, можно сказать, что джойстик - это вещь более низкого уровня, в то время как игровой контроллер - это обобщение на джойстиках, чтобы производить более предсказуемые / совместимые (но более ограниченные) для игр, которым нужны устройства ввода, подобные геймпаду.

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

По сути, игровой контроллер предоставляет xbox-подобные кнопки и оси для пользователя, освобождая разработчика приложений от необходимости поддерживать переназначение контроллера - так как переназначение выполняется в самом SDL. Для некоторые популярные контроллеры SDL уже имеют встроенные отображения, а для других определяемое пользователем отображение может быть загружено через переменную среды .

Существует также инструмент конфигурирования , который упрощает переназначение для конечного пользователя, включая экспорт полученной конфигурации в указанную переменную среды. Steam также имеет встроенный инструмент конфигурации, который конфигурирует его (предположительно - я никогда не использовал это) экспортирует в SDL - по сути, что делает самих пользователей ответственными за настройку своих контроллеров.

...