问题标签 [xinput]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 Xinput,Xbox 控制器两个拇指杆都没有改变值
我正在使用 Xinput API,但我在使用以下代码时遇到了问题。我的假设是 R/LX 和 R/LY 的定义应该随着它一次又一次地被调用而动态变化,但是拇指棒位置的值被任意设置为 -13108,所以 X 和 Y 的归一化幅度是 -.707,归一化幅度是 ~.428。我一直在尝试移动控制杆,但值不会改变。有任何想法吗?我误解了 Xinput API 吗?struct 控制器状态是否有意义?下面的代码仅适用于左摇杆,但右摇杆非常相似。
c++ - 在 C++ 中按下 Xbox 按钮
我正在尝试在 Visual Studio 中用 C++ 编写一个程序,以测试 XBOX 控制器的一些功能。我正在使用 xinput ,因此可以注册控制器是否连接到我的计算机,但是,我可以弄清楚如何判断是否按下了按钮。到目前为止,我有这个作为检查按钮功能
现在我只希望它打印出'A'但它不起作用,还有什么我需要添加的吗?
hid - 在读取除 HID API 之外的 Xbox 360 控制器时有什么方法可以阻止?
我试图从我的 Xbox 360 控制器中读取而不进行轮询。(准确地说,我实际上使用的是 Logitech F310,但我的 Windows 10 PC 将其视为 XBox 360 控制器。)我编写了一些相当讨厌的 HID 代码,它使用重叠 I/O 在两个线程中阻塞事件,一个表示准备好从 HID 设备读取报告,另一个表示 UI 线程已请求 HID 线程退出。这很好用,但是 HID 驱动程序的行为与 XInput 的行为有些不同。特别是,它将两个触发器合并为一个值,仅传递它们的差异(奇怪的是,当玩家的手指离开控件时,游戏期望 HID 值为 0x80)。XInput 将它们视为两个不同的值,这是一个很大的改进。此外,XInput 将帽子开关报告为四位,
对我来说,XInput 的缺点是,在控制器更改其值或按钮之一之前,似乎无法阻止读取请求。作为 HID 设备,ReadFile 调用将阻塞(更准确地说,WaitForMultipleEvents 阻塞直到有可用数据)。XInput 似乎预料到了轮询。对于一个自然而然地编写为轮询控制器的游戏,它更新游戏状态的频率(例如,可能为每个显示的新视频帧一次),这是有道理的。但是,如果您想将控制器用于其他目的(我正在开发一个戏剧应用程序),您可能需要一个纯粹的异步系统,如 HID API 提供的。但是,同样,HID API 结合了两个值触发器。
现在,当您使用 XInput 读取设备时,您不仅可以获得所有控件的状态,还可以获得数据包编号。MSDN 说数据包编号仅在控件状态更改时才会更改。这样,如果连续的数据包编号相同,您就不必在第一个数据包之后进行任何处理,因为您知道控制器状态没有改变。但你仍在投票,对我来说,这有点粗俗。
然而,让我感兴趣的是,当我在轮询之间设置一个很大的延迟(100 毫秒)时,我可以看到当值控件(触发器或摇杆)被移动时,数据包数量增加了不止一个。我认为,这表明设备正在发送数据包而无需等待轮询,并且每次轮询时我只会获取最新的数据包。如果是这种情况,似乎我应该能够在发送数据包之前进行阻塞,并且仅在发生这种情况时做出反应,而不必进行轮询。但我找不到任何迹象表明这是一种选择。因为我可以使用 HID API 进行阻止,所以我不想不尝试就放弃(包括在这里寻求建议)。
没有为控制器编写自己的驱动程序(我不确定它是否是没有专有文档的选项),有谁知道我如何使用重叠 I/O(或任何其他阻塞方法)来读取 Xbox 360 控制器XInput 的方式,触发器作为单独的值,帽子作为四个按钮?
下面是我编写的一些代码,用于读取控制器并显示数据包编号在两次读取之间可以跳跃不止一个:
请注意 DirectInput 没有多大帮助,因为它还将触发器组合成一个值。
谢谢!
c++ - 鼠标移动和按键按下时的winapi输入延迟读取事件
我正在制作基于 fps 的游戏。目前我有一个 wnd_proc 函数来捕获所有输入事件(WM_MOUSEMOVE,WM_KEYUP,WM_KEYDOWN,...)。我的鼠标用于像 fps 一样移动相机。当我只移动鼠标时它工作正常。但是当我同时按下按键移动角色和移动鼠标时,在游戏中检测到鼠标移动会有延迟。当我按下多个键时,我也注意到了延迟。
对于键盘事件,我没有使用我自己的输入类来检查按键是否被按下,而是使用 GetAsyncKeyState() 来读取键盘内容,这修复了多键延迟。但是我的鼠标仍然是问题。鼠标移动是否有异步功能?
- 编辑 -
这是我在 wndproc 函数期间调用的输入系统类。
下面是我的输入类
visual-studio-2015 - Visual Studio 2015 + XInput + XP 工具集
我有一个使用输入的 Visual Studio 2015 解决方案:XInput9_1_0.lib 已添加到链接器依赖项中,并且在使用默认工具集(v140)时一切正常。
为了让我的代码在 XP 上运行,我将工具集更改为 v140_xp。现在一切都编译好了,但我得到一个链接器错误(“无法打开输入文件'XInput9_1_0.lib'”)。
我在 C 盘上搜索了 XInput9_1_0.lib,但只能在文件夹中找到它:
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64 C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86 C:\Program文件 (x86)\Windows Kits\8.0\Lib\win8\um\x64 C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86
所以我猜与工具集 v140 一起使用的那个不再使用工具集 v140_xp 进行搜索。
解决我的问题的正确方法是什么?
c++ - C++ XInput 和 XBOX 360 控制器从不连接
我正在尝试连接 XBOX 360 控制器以获取程序的输入,但我的程序永远不会注册连接的控制器——我已确认控制器已连接。
我正在运行Windows,使用C++ 编程,并在我的 IDE 中使用QT。我的代码来自:https ://www.codeproject.com/articles/26949/xbox-controller-input-in-c-with-xinput
我没有从该站点使用的唯一代码是包含。我的包括只是:
我的 Xinput 库包含在我的 .pro 中,如下所示:
win32:LIBS += -lXinput9_1_0
当我运行代码时,程序永远不会连接到我的控制器。
有什么我遗漏或搞砸的吗?
windows - 如何以非弃用方式访问 Windows 上的操纵杆?
我想编写一个访问操纵杆的 Windows 应用程序。它只是一个非常简单的应用程序,它读取值并将它们发送到服务器,所以我没有使用任何游戏编程框架。但是,我对使用哪个 API 感到困惑。
我查看了多媒体操纵杆 API,但它被描述为被 DirectInput 取代。所以我查看了 DirectInput,但这也被 XInput 弃用了。然而,XInput 文档只讨论了 Xbox360 控制器,并表示它不支持“旧版 DirectInput 设备”。
Microsoft 是否已将整个 HID 操纵杆使用类型扔进垃圾箱并放弃支持他们转而支持他们自己的专有控制器产品,还是我遗漏了什么?
c++11 - XINPUT_GAMEPAD_A 不起作用,除非您在程序启动时按住按钮
所以我在我的程序中使用了 xinput,它已经全部设置好并且正在工作,所以我可以检测到我的 xbox one 控制器。我希望能够检测到何时按下控制器上的按钮。如果我在程序启动时按住按钮,我使用的程序就可以工作。我在一段时间内设置了 if 命令,因此它会不断执行,尽管由于某种原因,当我在控制器上按 A 时该值不会改变。
所以基本上,如果我在程序打开时按住 A ,它就会工作并在屏幕上返回 cout 。虽然如果我想在程序启动后稍微按下它(这是我想要的工作)它不会检测到它。
这是我的代码:
据我所知,我以正确的顺序包含了所有正确的库:
c# - SharpDX.Xinput 检查一个按钮是否被按住而不是被按下
我正在尝试检查是否按住了我的 Xbox 控制器上的 A 按钮。现在我有它,所以我可以看到我的按钮是否被按下但没有被按住。这是我现在用来查看它是否被按下的代码。
c# - 在 Visual Studio 中使用 Xbox One 控制器?
我正在尝试从 Xbox One 控制器获取输入,但我无法让它工作。我尝试了 SharpDX,但在从 NuGet 安装 SharpDX 后无法添加“SharpDX.XInput”。我还尝试了 XInputDotNet,并添加了对 XInputDotNetPure 的引用,当我运行我的程序时它会崩溃,并显示错误消息:“尝试加载格式不正确的程序”。如果您知道我可以如何解决此问题,或通过其他方式从 Xbox One 控制器获取输入,如果您能与我分享,我将不胜感激。谢谢!