按下SDL游戏杆按钮/ C ++

时间:2018-10-24 16:22:02

标签: c++ controller sdl xbox

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

1 个答案:

答案 0 :(得分: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

相关问题