SDL_Joystick
和SDL_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_GameController
和SDL_GameController
都可以互换,但似乎SDL_Joystick
可以替换并慢慢接替SDL_Event
。
原因是,在轮询SDL_Event
时,SDL_Event::jbutton
实例包含SDL_Event::cbutton
和SDL_Joystick
结构,代表SDL_GameController
按钮和{{1分别是按钮。我想我可以为播放器控件使用其中一个或两个按钮事件。
我可能在这里错了。
我想问一下:
SDL_Joystick
和SDL_GameController
之间有什么区别? SDL_Joystick
现在是指这个控制器吗?
SDL_GameControllerFromInstanceID
同样适用于SDL_GameController
?
使用SDL_Joystick
优于SDL_GameController
(反之亦然)有哪些优缺点?
答案 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 - 实质上是让用户自己负责配置他们的控制器。