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
。
如何识别控制器上的某个按钮是否被按下? 例如 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
。