SDL 操纵杆按钮按下 / C++

SDL Joystick Button Pressed / C++

如何识别控制器上的某个按钮是否被按下? 例如 Xbox 360 控制器上的 A 按钮...

您首先必须初始化 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.

完成后不要忘记 "close" 操纵杆 (SDL_JoystickClose(joy)。)

无论如何,当您完成所有这些操作后(通常只有一次,并且在您的游戏循环之外),然后您可以像这样检查您感兴趣的按钮:

if (SDL_JoystickGetButton(joy, button_number) != 0)
    // Button was pressed; yay!

要弄清楚按钮的编号,您可以做一些实验。 IIRC,Xbox360 控制器的按钮和轴几乎总是保持相同的数字。

注意SDL还有"game controller" API 和上面的密切相关;只需在函数名称中使用 GameController 而不是 Joystick