контроллер — нажата кнопка джойстика SDL / переполнение стека

Как я могу узнать, нажата ли определенная кнопка на контроллере или нет?
Например, кнопка A на контроллере Xbox 360 …

-1

Решение

Сначала вы должны инициализировать поддержку джойстика 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 в именах функций.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]