【问题标题】:Is there a fix for the mismapping in the js Gamepad API?js Gamepad API 中的映射错误是否有修复?
【发布时间】:2021-07-01 18:33:00
【问题描述】:

我目前正在用香草 JS 构建一个小游戏,但是当我在控制器(底部的规格)上工作时,它错误地映射了按钮。它具有与游戏手柄 API 标准控制器相同数量的输入,以及所有相同的控件,但它不以无法播放的方式匹配。我使用另一个程序(在 API 文档中提供)来测试我的控件,当我发现它不起作用时,我写了这个小曲子:

let gamepad = null;

window.addEventListener("gamepadconnected", function(e) {
  console.log(`gamepad: connected`);
    gamepad = e.gamepad;
});

function loop(){
    if(gamepad){
        let buttons = gamepad.buttons;
        for(let n = 0; n <= 16; n++){
            //16 is the maximum buttons allowed, I checked
            if(buttons[n].pressed)
                console.log(`Pressed: ${n}`);
        }
    }
}

setInterval(loop,45);

有关不匹配控件的列表,请参见下表:

Index What should be what is
0 A Power
1 B A
2 X B
3 Y X
4 left bumper n/a
5 right bumper Y, left bumper
6 left trigger n/a
7 right trigger n/a
8 select select, right bumper
9 start n/a
10 left stick button n/a
11 right stick button left stick button
12 dpad_up dpad_up
13 dpad_down dpad_down
14 dpad_left dpad_left
15 dpad_right dpad_right
16 power right stick button, start

如果有人有任何类型的解决方法,我将不胜感激。

注意事项: 我正在使用 M1 macbook pro(最新型号)、带蓝牙和耳机插孔的 Xbox One 控制器,以及 Replit 作为 Firefox 上的 IDE。 我很高兴使用 JQuery,但除非绝对必要,否则我不想使用其他外部库(尽管请随意提出建议!)。

【问题讨论】:

  • 有什么问题?如果您知道实际映射是什么,请在您的应用程序中使用它。
  • 虽然如果两个按钮生成相同的代码,似乎有些问题。
  • @Barmar 有两个问题:1)按钮不生成唯一代码,2)你不能(据我所知)做任何真正的自定义映射。事后仅重新路由按钮输入,并且控制器只有一种布局(“标准布局”)。

标签: javascript game-development gamepad-api


【解决方案1】:

游戏手柄mapping 被认为可以解决这个问题,但目前唯一的映射是"standard"。如果您使游戏控件可自定义(例如,您可以让玩家在游戏设置对话框中为“跳跃”动作选择首选按钮),您的游戏应该仍然可以玩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多