Как я могу узнать, нажата ли определенная кнопка на контроллере или нет?
Например, кнопка A на контроллере Xbox 360 …
Сначала вы должны инициализировать поддержку джойстика SDL (я предполагаю, что SDL2 здесь, но младшие версии не должны быть такими разными). Примерно так:
SDL_InitSubSystem(SDL_INIT_JOYSTICK); // bitwise OR with other subsystems you need,
// e.g. SDL_INIT_VIDEO | SDL_INIT_JOYSTICK
Затем вам нужно открыть данный джойстик (обычно вы перечисляете все джойстики и позволяете пользователю выбрать один или выбрать один для них.) Примерно так:
SDL_Joystick * joy = SDL_JoystickOpen(0); // Use 1, 2, etc. for the other joysticks,
// You should use SDL_NumJoysticks() then.
И не забудьте «закрыть» джойстик, когда закончите с ним (SDL_JoystickClose(joy)
.)
В любом случае, когда вы сделали все это (обычно только один раз и за пределами игрового цикла), вы нажимаете кнопку, которая вас интересует, следующим образом:
if (SDL_JoystickGetButton(joy, button_number) != 0)
// Button was pressed; yay!
Чтобы выяснить номер кнопки, вы можете провести несколько экспериментов. IIRC, кнопки и оси контроллера Xbox360 всегда остаются на одном и том же уровне.
Обратите внимание, что SDL также имеет API «игровой контроллер», который тесно связан с приведенными выше; просто используйте GameController
вместо Joystick
в именах функций.
Других решений пока нет …