网站搜索

javascript - 游戏手柄 API - 游戏手柄对象在断开后会保留,并在重新连接时重复使用吗?


摘要:
我想说明两个或多个‘Xbox 360手柄’之间的区别。

背景:
我正在使用 Javascript (Typescript) 构建一个用于 Gamepad API 的 GamepadManager。GamepadManager 的主要功能是支持在特定游戏手柄按钮或轴使用时调用的回调函数。(GamepadManager 还使用一个控制器配置文件列表,这些配置文件专门映射特定品牌和型号的按钮和轴)

问题:
当一个物理游戏手柄重新连接时,**是否可以将相同的 Javascript 游戏手柄对象再次链接/分配给原先断开的物理游戏手柄?**
这实际上可能会自动发生吗?更好的是,是否可以手动进行重新链接?

window.addEventListener("gamepaddisconnected", function(e) {
    var gp = e.gamepad;
    var isConnected = gp.connected;
});

场景:
当一个物理游戏手柄断开连接时,上述事件监听器将返回一个事件,该事件包含最初用于现在已断开的物理游戏手柄的游戏手柄对象。事件的游戏手柄对象有一个布尔值,用于指定物理游戏手柄是否仍然连接......但当然它已经断开,因为它是从断开事件监听器返回的。对我来说,这意味着游戏手柄对象可能在该物理游戏手柄保持断开状态期间被持续使用,或许可以在它重新连接时再次使用。

我正在寻找的功能:
我希望我的 GamepadManager 足够智能,能够将重新连接的物理手柄与断开前的同一游戏内可操作角色关联起来。
(这样,如果玩家使用特定的手柄,手柄断开后再重新连接,系统会记住该手柄,并且它仍然会控制同一个角色)

此外,我希望即使所有 4 个物理游戏手柄都是相同型号的 Xbox 360 控制器,GamepadManager 也能够区分它们,而不管它们连接到哪个 USB 端口。

每个实体手柄是否可能有一个特定的ID/序列号,以便与相同型号的其他手柄区分开来?还是说USB端口是区分两个或多个相同实体手柄的唯一方式?

或者:
有没有更好的方法来管理游戏的实体手柄? (横版动作沙盒)