问题标签 [gamepad-api]

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.

0 投票
1 回答
168 浏览

javascript - 是否可以使用 Gamepad API 在 javascript 中注册自定义游戏手柄?

快速背景

我目前正在开发一个带有 A-frame 的 VR 应用程序来展示 VR 硬件。我们使用通过 websocket/bluetooth 连接的自定义控制器,并希望使它们与tracked-controls兼容。这些 A-Frame 组件使用 Gamepad API 来更新模型的定位和方向,并与其他模拟手等的组件兼容。

为什么要使用 javascript 注册游戏手柄?

跟踪控件使用游戏手柄 api 来更新自己,因此能够将我们自己的游戏手柄放在 navigator.getGamepads 列表中并更新游戏手柄的数据将是完美的。然而,当前的控制器在不断变化,像 vive 这样的特定于浏览器的实现是不可能的。

是否可以使用 Gamepad API 在 javascript 中注册自定义游戏手柄?

0 投票
1 回答
167 浏览

device-driver - 自定义游戏手柄处理入门

由于我发现缺少 Windows 的默认游戏手柄处理,因此我想为此编写一个自定义界面。基本上,我想在插入的游戏手柄和 Windows 游戏控制器管理之间添加一层。虽然我不确定如何解决这个问题,但这些是我到目前为止考虑的步骤:

  • 从 Windows 的游戏控制器管理中断开任何插入的游戏手柄
  • 创建虚拟游戏控制器(可能使用 vJoy/pyvjoy)
  • 从插入的游戏手柄读取输入并将其应用到虚拟游戏控制器

但是,除了第二个要点之外,我不知道这些是否(以及如何)可行。是否有任何 API 可以按照我需要的方式与设备交互?我需要进入驱动程序编程并重写游戏手柄驱动程序吗?

我知道这是一个非常狭窄的话题的广泛问题,但我有点不知从哪里开始。任何帮助将非常感激。

0 投票
2 回答
900 浏览

bluetooth - Oculus 的 BLE 和蓝牙游戏手柄选项

我正计划构建一个移动应用程序,通过 BLE 发送带有 HID over GATT 的操纵杆命令。

Oculus 外接游戏手柄选项是否能够连接到它?或者它只适用于蓝牙?因此BLE不起作用?

如果您能指出类似的例子,我将不胜感激。

谢谢

0 投票
2 回答
1588 浏览

javascript - 最佳游戏手柄轮询频率是多少?

我正在使用 250 毫秒计时器在 js 中轮询 Gamepad,以在 4 个不同的视点之间切换。然而,这个值仍然太高,无法保证看到每个按钮按下。我注意到如果一个按钮被按下和释放太快(即,< 250ms),那么它就会被错过。

除了控制器连接和断开连接外,我看不到任何与游戏手柄相关的事件触发器,并且我被轮询和增加频率所困。

任何人都可以提出一种保证检测到按钮按下而不增加轮询频率的方法吗?如果增加轮询频率是唯一的选择,那么什么是最佳选择?

0 投票
0 回答
1114 浏览

javascript - Android Chrome 上的 HTML5 游戏手柄 API

我正在尝试评估我对游戏的想法的可行性。我想将游戏制作为网络应用程序(或可能是 PWA),支持控制器/游戏手柄,并可在移动浏览器(例如 Android Chrome)上使用。

为了看看这是否可行,我正在尝试通过蓝牙连接我拥有的 Xbox One S 控制器,并使用http://html5gamepad.com/对其进行测试。当我将控制器连接到我的计算机并尝试使用时,控制器被拾起就好了。但是,当我将它连接到我的 Android 手机 (Pixel 3) 并在 Chrome (71.0.3578.98) 浏览器中访问该网站时,它根本无法识别该设备。

window.addEventListener("gamepadconnected", ...)我还使用和作为我的测试,使用通过 express 提供并通过 ngrok 提供的小型 html 和 javascript 页面对此进行了navigator.getGamepads()测试,但这也无法识别。

我还用另一部手机(三星 Galaxy Note 3)进行了测试,并遇到了同样的行为。

控制器肯定连接到我的手机,因为我可以用它在我的主屏幕上导航,我什至可以在浏览器中的网页之间移动,但似乎由于某种原因事件没有传递到页面。

更新:我刚刚在我的手机上的 Firefox 上尝试过这个并且它有效,所以我想也许我会向 Android Chrome 的错误列表提交一个错误报告,如果这是公开的。

更新 2:https ://bugs.chromium.org/p/chromium/issues/detail?id=916104&can=2&q=OS%3DAndroid%20component%3ABlink%3EGamepadAPI%20&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component %20Status%20Owner%20Summary%20OS%20Modified

0 投票
0 回答
425 浏览

javascript - Vuejs 和 HTML5 Gamepad API:如何渲染 Gamepad 对象?

我正在尝试列出可用的游戏手柄并在可用的游戏手柄中选择一个游戏手柄。当select this gamepad按下按钮时,游戏手柄列表将不可见,只有选定的游戏手柄可见。

我试图这样做v-if

但是当我按下按钮时,selectedGamepad值不会动态变化。因为当我按下按钮时,Vuejs 不会渲染gamepads loop.

但是如果gamepads loop可见selectedGamepad值动态变化。(如果您删除v-ifon gamepads loop

我不明白为什么v-for="gamepad in gamepads"效果selectedGamepad

如果我使用v-show而不是v-if一切正常,但我不想gamepads在按下按钮后渲染。

您可以从此处查看完整示例:https ://jsfiddle.net/eywraw8t/518811/

我认为问题与Gamepad对象有关。IfselectedGamepad是一个Gamepad对象 Vuejs 不能动态渲染。但是如果selectedGamepad是一个array(例如轴数组)一切正常。但我不知道如何Gamepad正确渲染对象。

0 投票
1 回答
1729 浏览

javascript - 如何在 HTML5 JavaScript 中检测joy-con 输入/运动控件

我正在尝试创建一个使用 Nintendo Switch Joy-Cons 和运动控制的 HTML5 JavaScript 游戏。问题是,当 Joy-Cons 连接到我的 PC 时,我不知道如何检测它们的运动控制。

我已经设法使用 Gamepad API 使用 Xbox 控制器、PS4 和 Joy Con 实现按钮输入,但是否可以使用 Joy-Con 运动控制来实现?

如果你想看的话,这里是 Gamepad API 的代码(同样,我的目标是 Joy-Con运动控制):

使用此链接作为参考

0 投票
0 回答
112 浏览

firefox - Firefox 56+ 打破了跨多个窗口/标签的 Gamepad API

Firefox 56+ 打破了跨多个窗口/标签的 Gamepad API

我正在开发的应用程序使用 Gamepad API 来允许使用 xbox 控制器来控制视频制作相机。它支持多个窗口/选项卡。

一切都很好,但是从 Firefox 版本 52 升级到 65 后,当打开多个页面时,控制器停止正常工作。更新对于视频稳定性是必要的,因此降级不是一种选择。

如果 Mozilla 修复了问题,最坏的情况将使用固定的 Vesrion 进行更新。


如何重现:
运行windows打开Firefox 56+版本

  1. 打开https://html5gamepad.com/
  2. 连接 Xbox 控制器(可能是任何游戏手柄)

观察控制器是否被检测到,并且游戏手柄上的输入显示在测试仪中。

  1. 打开第二个窗口并导航到https://html5gamepad.com/

观察 at 未检测到控制器 预期:应检测到控制器,并且应在测试仪中显示 inout。

如果您降级到 56 以下或禁用多进程,browser.tabs.remote.autostart则不会出现此问题。


我所知道/尝试过的:


在此之前被标记为重复。我知道这是一个类似于Is there a way to use the HTML5 Gamepad API with multiple windows or tabs in Firefox? 但在这个问题上没有任何动静,而且非常具体。


TLDR:启用多处理的 FF v56+ 在多个窗口中使用时会破坏 Gamepad API。任何解决方法或修复?

0 投票
1 回答
2056 浏览

c# - 在 C# 中读取游戏手柄输入的现代方法

问题:我想读取 c# 下的游戏手柄/操纵杆输入,并希望能够知道按下了哪个键。(至少有几个游戏手柄型号)

Google 和 stackoverflow 充满了不同的过时解决方案,其中大多数是在 2011 年提出的。一些流行的库,如SharpDXSlimDX已经被废弃并且不受支持。

我最终使用了SharpLibHid,它弄乱了一些原始输入。我什至取得了一些成功。我正在开发一个 WPF 应用程序,但该库需要来自 winforms 的 WndProc,借助这个技巧https://stackoverflow.com/a/42008211/3348804一切正常。代码很长,你可以在这里获得很好的示例软件:https ://github.com/Slion/SharpLibHid

关键是我能够从中提取此信息SharpLib.Hid.Event

通过使用经验方法,我可以观察到一些模式并使用其中一些数据来处理游戏手柄。这根本不是正确的做法。而对于另一个游戏手柄,InputReport模式则完全不同。

我看到了很多用于游戏手柄的键盘映射程序——它们几乎可以理解任何设备。所以有一些方法可以做正确的事情。

也许有人可以建议至少一些关于如何使用游戏手柄或如何解释原始数据(带有真实世界的例子)的文档?

0 投票
2 回答
125 浏览

html - 扩展原生 GamepadAPI?

我正在尝试扩展本机 GamepadAPI 以包含自定义控制器代码。

使用 TypeScript,我实现了一个简单的函数来调度“gamepadconnected”事件。

但是,在调度事件时,我收到一个错误:

尽管实例化的 Gamepad 对象看起来不错,但 Gamepad 的类型并不正确。为什么会这样?如何创建一个新的、正确的 Gamepad 对象来触发本机事件?