使用 XInput,是不是可以获得控制器的图像?

Posted

技术标签:

【中文标题】使用 XInput,是不是可以获得控制器的图像?【英文标题】:using XInput, is it possible to get an image of the controller?使用 XInput,是否可以获得控制器的图像? 【发布时间】:2014-01-03 17:28:18 【问题描述】:

在我的简单想法中,发送一个漂亮的操纵杆图像似乎很有用,其中包含图像上按钮和轴位置的索引。可以通过 XInput 或 DirectInput API 查询这样的事情吗?是否是特定于驱动程序的,如果是,哪些驱动程序支持此功能?

我特别想支持 Logitech 滚轮和 XBOX 360 控制器。 Logitech Profiler 似乎带有此信息(或从驱动程序中提取)。我的代码也可以访问它吗?

我看到游戏控制器属性中显示了操纵杆的图像,但我认为整个属性页都是从驱动程序报告的?

【问题讨论】:

注意“游戏控制器属性”对话框是 DirectInput UI 的东西。 Xbox 360 通用控制器只显示在那里,因为驱动程序为不支持 XINPUT 的游戏模拟 DirectInput 设备。 【参考方案1】:

XInput 不提供,也不应该提供,XInput 是用于访问控制器状态和控制器功能的接口。这是您可以在代码中手动检测到的东西,找到正确的设备 ID,我相信这也是 Logitech Profiler 所做的(因为它是 Logitech 的自定义应用程序),它只是将图像作为程序中的资源本身。

您通常会联系 Microsoft、Sony、Nintendo 或 Logitech,他们将获得其控制器的高质量图像,这些图像已获准在游戏中使用。特别是对于主机游戏中的控制器图像,您需要遵循某些要求。 Windows 和其他操作系统的游戏不遵循相同的要求,但您仍然应该能够从 Microsoft 和 Logitech 检索此信息。

通过自己检索资源,您还可以将它们转换为适合您呈现它们的界面的格式。

【讨论】:

Xbox 通用控制器(即 Xbox 360 控制器)的图像可从 here 轻松获得。按钮图像可从here 获得。 Xbox One 控制器图像未公开提供,但布局非常相似,支持的 Windows 驱动程序有意模拟 Xbox 360(即目前不支持 PC 的肩隆声)。【参考方案2】:

由于 Windows XInput API 是专门为 Xbox 360 控制器创建的,因此可以对控制器布局进行大量假设。即使是现在,在 XBOne 游戏手柄的官方驱动程序发布之后,官方的API 文档仍然不遗余力地明确将讨论限制在 360 度手柄。

【讨论】:

以上是关于使用 XInput,是不是可以获得控制器的图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Xinput 添加到游戏手柄 arduino 项目?

xInput 中的键盘和鼠标设备支持

C++ XInput 和 XBOX 360 控制器从不连接

将 XInput 调用转换为 MAC OS X 上的 DirectInput 调用(从 PS3 模拟 x360 控制器)

域控安全之域渗透

在 C++ 中按下 Xbox 按钮