什么是 SDL_Joystick 什么是 SDL_GameController?两者之间有什么关系?
What is SDL_Joystick and what is SDL_GameController? What are the relationships between the two?
SDL_Joystick
和SDL_GameController
有什么关系?这些是我现在唯一知道的事情:
SDL_GameController
和相关函数都是 SDL2 中引入的新 API 的一部分。
SDL_GameController
和相关函数建立在现有 SDL_Joystick
API. 之上
- (工作草案)您可以通过调用函数
SDL_GameControllerGetJoystick()
并传入 SDL_GameController
. 的实例来获取 SDL_Joystick
的实例
- (Working Draft) 您可以通过调用
SDL_JoystickInstanceID()
and passing in an instance of SDL_Joystick
, then pass in the SDL_JoystickID
to SDL_GameControllerFromInstanceID
. 首先获得 SDL_GameController
的实例
尽管 SDL_Joystick
和 SDL_GameController
都可以互换,但似乎 SDL_GameController
在这里取代并慢慢继承 SDL_Joystick
。
原因是,当轮询 SDL_Event
时,SDL_Event
实例同时包含 SDL_Event::jbutton
和 SDL_Event::cbutton
结构,代表 SDL_Joystick
按钮和 SDL_GameController
按钮,分别。我想我可以使用一个或两个按钮事件来控制播放器。
我这里可能是错的。
我想问:
SDL_Joystick
和SDL_GameController
有什么区别?
SDL_Joystick
现在是指这个控制器吗?
SDL_GameController
也是一样吗?
使用 SDL_Joystick
而不是 SDL_GameController
的 advantages/disadvantages 是什么(反之亦然)?
首先,SDL 游戏控制器是 SDL joystics 的扩展(对于这个答案的范围,当我说 "controller" 或 "joystick" 我指的是 SDL 的实现,而不是一般的硬件设备类别).正如 wiki 所说,
This category contains functions for handling game controllers and for
mapping joysticks to game controller semantics. This is built on top
of the existing joystick API.
If you are running your game from Steam, the game controller mapping
is automatically provided for your game.
内部 SDL uses joystic 事件并处理它们以根据控制器映射生成游戏控制器事件。因此,有人可能会说 joystic 是较低级别的东西,而游戏控制器是对操纵杆的概括,可以为需要类似游戏手柄的输入设备的游戏产生更多 predictable/compatible(但更受限制)。
使用游戏控制器,您可以为一个类似 xbox 的控制器编程输入,SDL 将使用户的控制器与之兼容(有时在用户的帮助下 - 有太多不同的控制器,我们不能可能期望 SDL 对所有这些都有配置)。当然,如果控制器非常不同(或者根本不是控制器 - 例如飞行模拟杆、轮子等),那将是有问题的。
基本上,游戏控制器为用户端提供类似 xbox 的按钮和轴,使应用程序开发人员无需支持控制器重新映射 - 因为重新映射是在 SDL 本身中完成的。对于 some popular controllers SDL already have builtin mappings, and for others user-defined mapping can be loaded via environment variable.
还有一个 configuration tool 可以简化最终用户的重新映射,包括将生成的配置导出到所述环境变量。 Steam 也有内置的配置工具,它的配置(据说——我从来没有用过)导出到 SDL——本质上让用户自己负责配置他们的控制器。
SDL_Joystick
和SDL_GameController
有什么关系?这些是我现在唯一知道的事情:
SDL_GameController
和相关函数都是 SDL2 中引入的新 API 的一部分。SDL_GameController
和相关函数建立在现有SDL_Joystick
API. 之上
- (工作草案)您可以通过调用函数
SDL_GameControllerGetJoystick()
并传入SDL_GameController
. 的实例来获取 - (Working Draft) 您可以通过调用
SDL_JoystickInstanceID()
and passing in an instance ofSDL_Joystick
, then pass in theSDL_JoystickID
toSDL_GameControllerFromInstanceID
. 首先获得
SDL_Joystick
的实例
SDL_GameController
的实例
尽管 SDL_Joystick
和 SDL_GameController
都可以互换,但似乎 SDL_GameController
在这里取代并慢慢继承 SDL_Joystick
。
原因是,当轮询 SDL_Event
时,SDL_Event
实例同时包含 SDL_Event::jbutton
和 SDL_Event::cbutton
结构,代表 SDL_Joystick
按钮和 SDL_GameController
按钮,分别。我想我可以使用一个或两个按钮事件来控制播放器。
我这里可能是错的。
我想问:
SDL_Joystick
和SDL_GameController
有什么区别?SDL_Joystick
现在是指这个控制器吗?SDL_GameController
也是一样吗?使用
SDL_Joystick
而不是SDL_GameController
的 advantages/disadvantages 是什么(反之亦然)?
首先,SDL 游戏控制器是 SDL joystics 的扩展(对于这个答案的范围,当我说 "controller" 或 "joystick" 我指的是 SDL 的实现,而不是一般的硬件设备类别).正如 wiki 所说,
This category contains functions for handling game controllers and for mapping joysticks to game controller semantics. This is built on top of the existing joystick API.
If you are running your game from Steam, the game controller mapping is automatically provided for your game.
内部 SDL uses joystic 事件并处理它们以根据控制器映射生成游戏控制器事件。因此,有人可能会说 joystic 是较低级别的东西,而游戏控制器是对操纵杆的概括,可以为需要类似游戏手柄的输入设备的游戏产生更多 predictable/compatible(但更受限制)。
使用游戏控制器,您可以为一个类似 xbox 的控制器编程输入,SDL 将使用户的控制器与之兼容(有时在用户的帮助下 - 有太多不同的控制器,我们不能可能期望 SDL 对所有这些都有配置)。当然,如果控制器非常不同(或者根本不是控制器 - 例如飞行模拟杆、轮子等),那将是有问题的。
基本上,游戏控制器为用户端提供类似 xbox 的按钮和轴,使应用程序开发人员无需支持控制器重新映射 - 因为重新映射是在 SDL 本身中完成的。对于 some popular controllers SDL already have builtin mappings, and for others user-defined mapping can be loaded via environment variable.
还有一个 configuration tool 可以简化最终用户的重新映射,包括将生成的配置导出到所述环境变量。 Steam 也有内置的配置工具,它的配置(据说——我从来没有用过)导出到 SDL——本质上让用户自己负责配置他们的控制器。