什么是SDL_Joystick,什么是SDL_GameController?两者之间有什么关系?

时间:2018-04-25 12:25:40

标签: c++ c sdl sdl-2 joystick

SDL_JoystickSDL_GameController之间的关系是什么?这些是我现在唯一知道的事情:

  • SDL_GameController和相关函数都是SDL2中引入的新API的一部分。
  • SDL_GameController及相关功能构建于现有SDL_Joystick API之上。
  • (工作草案)您可以通过调用函数SDL_GameControllerGetJoystick()并传入SDL_Joystick的实例来获取SDL_GameController的实例。
  • (工作草案)您可以通过调用SDL_JoystickInstanceID()并传入SDL_GameController的实例,然后将SDL_Joystick传递给{SDL_JoystickID来获取SDL_Joystick的实例。 {3}}。

即使SDL_GameControllerSDL_GameController都可以互换,但似乎SDL_Joystick可以替换并慢慢接替SDL_Event

原因是,在轮询SDL_Event时,SDL_Event::jbutton实例包含SDL_Event::cbuttonSDL_Joystick结构,代表SDL_GameController按钮和{{1分别是按钮。我想我可以为播放器控件使用其中一个或两个按钮事件。

我可能在这里错了。

我想问一下:

  • SDL_JoystickSDL_GameController之间有什么区别?
  • SDL_Joystick现在是指这个控制器吗?

    SDL_GameControllerFromInstanceID

    同样适用于SDL_GameController

    enter image description here

  • 使用SDL_Joystick优于SDL_GameController(反之亦然)有哪些优缺点?

1 个答案:

答案 0 :(得分:1)

首先,SDL游戏控制器是SDL joystics的扩展(当我说'#34;控制器"或"操纵杆"我的意思是SDL" s时,这个答案的范围实现,而不是一般的硬件设备类别)。正如wiki所说,

  

此类别包含处理游戏控制器和的功能   将操纵杆映射到游戏控制器语义。这是建立在顶部   现有的操纵杆API。

     

如果您是从Steam运行游戏,那么游戏控制器映射   为您的游戏自动提供。

内部SDL uses joystic事件并根据控制器映射处理它们以产生游戏控制器事件。因此可以说,joystic是较低级别的东西,而游戏控制器是对操纵杆的概括,以便为想要类似游戏手柄的输入设备的游戏产生更可预测/兼容(但更受约束)。

使用游戏控制器,您可以只为一个类似xbox的控制器编程输入,而SDL将使用户的控制器与之兼容(有时用户的帮助 - 有太多不同控制器,我们不能期望SDL具有所有这些的配置。当然,如果控制器非常不同(或根本不是控制器 - 例如飞行模拟棒,车轮等),那将是一个问题。

游戏控制器基本上为用户提供类似xbox的按钮和轴,使应用程序开发人员无需支持控制器重映射 - 因为重映射是在SDL中完成的。对于some popular controllers,SDL已经有内置映射,而对于其他人,可以通过environment variable加载用户定义的映射。

还有一个configuration tool简化了最终用户的重映射,包括将结果配置导出到所述环境变量。 Steam还有内置的配置工具,它配置它(据说 - 我从未使用过它)导出到SDL - 实质上是让用户自己负责配置他们的控制器。