如何识别是否按下了控制器上的某个按钮? 例如Xbox 360控制器上的A按钮...
答案 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
。