首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何帮助Windows或Windows应用程序正确处理复合操纵杆?

如何帮助Windows或Windows应用程序正确处理复合操纵杆?
EN

Stack Overflow用户
提问于 2016-08-08 23:55:09
回答 1查看 262关注 0票数 1

这个问题的背景主要是Windows7,尽管我也在10上尝试过。

我已经使用Arduino Mega 2560构建了一个4人复合操纵杆。它是一个USB设备,由4个HID操纵杆接口组成,每个接口都有自己的端点。每个带有按钮的操纵杆在设备管理器中正确显示为单独的HID界面。它们由VID/PID/MI_#三元组正确识别,其中MI_#是接口索引(MI_0、MI_1等)。校准还将每个接口视为独立的,输入按照其枚举顺序正确对应于每个控制器(即:第一个接口仅从索引为0的操纵杆接收输入)。当我转储描述符时,它们看起来也是正确的。

有两个问题:

1)命名

Windows仅从第一个接口读取接口字符串。根据描述符转储,每个接口都应该有自己的字符串,从"Player 1“到"Player 4”。Windows7把他们都看作是“玩家1”。检查regedit,这可能是因为Windows 7在每个操纵杆设备上只有一个OEM名称,因此只获得第一个界面的OEM名称。除非我以某种方式得到微软的解决方案,否则我会坚持这种行为吗?

出于某种原因,Windows10将它们都称为"Arduino操纵杆“。我不确定是因为我使用的是从Arduino游戏杆教程中得到的相同的测试VID/PID组合,而Windows只是选择了其他人用于其设备的名称,还是它将我的制造商字符串与接口类型“游戏杆”连接在一起。我不确定为什么它会做后者,但如果是前者,我更愿意以某种方式阻止这种查找。

我想同时解决这两个问题,但实际上我主要使用Windows7。

2)混合输入

我只在一些应用程序中看到过这种行为,但不幸的是,其中一个是Steam,其他的可能是Unity。它的表现不同,所以我认为这是由于没有标准的方法来处理复合操纵杆。

在Steam上,当我尝试添加/测试控制器时,在Big Picture模式下,虽然它会检测所有4个控制器(我可能会添加,全部作为播放器4),但它只接受来自Joy4的输入,无论我选择哪个控制器。但是,在保存配置后,所有操纵杆都应用了相同的映射。这实际上很好,因为我可以使用任何控制器来导航大图片模式,但我担心这是我可能在其他应用程序中看到的其他问题的症状。

在"Race the Sun“中,当手动配置操纵杆控制时(它说检测到Player 4),它会将来自单个操纵杆的输入解释为来自多个操纵杆。通常,四个方向输入中的两个来自Joy1,而另外两个来自所使用的操纵杆以外的其他操纵杆。例如:如果我在配置Joy2,它将注册来自Joy1的输入并显示为Joy3。

在“过热”中,它允许一个操纵杆注册为4个不同的玩家。通常情况下,你需要点击控制器上的特定按钮来注册为玩家,但在我的例子中,如果你在joy1上点击该按钮4次,那么4个玩家将被注册。如果你像这样开始游戏,你最终会用一个操纵杆同时控制所有4个角色。很有趣,但不是预期的用途,我确定。

无论是"Race the Sun“还是"Overcooked”都是使用Unity开发的,我知道Unity的操纵杆管理是相当缺乏的。of至少被设计成可以处理多个玩家(这是一个沙发合作游戏),所以这可能更多地与我的控制器的复合性质有关。

我应该注意到,其他应用程序在区分操纵杆方面没有问题。甚至xbox360ce也认为它们是分开的,并且仿真在几个蒸汽游戏上工作,单人和多人。尽管我使用的是xbox360ce,但它仍然会让我的操纵杆变得很糟糕。

我给Stack Overflow带来的问题是,我可以做些什么来改善应用程序如何处理我的操纵杆?现在我使用的是通用的Windows游戏控制器驱动程序。从理论上讲,这应该足够了,但问题#1表明,复合操纵杆可能不是预期的用例。驱动程序开发甚至有希望解决我上面提到的应用程序的问题,因为我看不出设备在识别方面有什么明显的不同。我希望在USB设备编码方面更有经验的人能提供一些见解。

无论如何,我的Arduino草图和固件都可以在here上找到。

EN

回答 1

Stack Overflow用户

发布于 2016-08-13 11:02:29

我找到了一个解决“太阳竞赛”和“过热”的方法。

“太阳赛跑”可能希望我的操纵杆提供从0到某个最大值的轴范围(例如: 32767)。我将固件设置为从-255到+255。虽然其他应用程序可以很好地处理这一点,但"Race the Sun“可能会期望更常见的0-X行为(这是我的罗技操纵杆提供的范围)。更改此设置后,我能够正确配置和播放它。我还更新了我的GitHub项目;链接在原始问题中。

“过熟”的问题实际上是由错误配置或损坏的xbox360ce安装引起的。在对模拟器进行修补的过程中,我肯定搞砸了一些东西,因为我搞砸了之前正在运行的游戏。我通过擦除所有文件,包括ProgramData/X360CE中的内容,并重新下载所有内容和重新做控制器来解决这个问题。现在,我的所有游戏似乎都运行正常。

这仍然是Steam的问题。由于某些原因,Steam从重启到重启都不记得我的操纵杆配置。就目前而言,我决定只是忍受默认的操纵杆行为,但最终也想解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38833654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档