首页 > 解决方案 > js Gamepad API 中的映射错误是否有修复?

问题描述

我目前正在用香草 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);

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

指数 应该是什么 什么
0 一个 力量
1 一个
2 X
3 是的 X
4 左保险杠 不适用
5 右保险杠 Y、左保险杠
6 左触发器 不适用
7 正确的触发器 不适用
8 选择 选择,右保险杠
9 开始 不适用
10 左摇杆按钮 不适用
11 右摇杆按钮 左摇杆按钮
12 dpad_up dpad_up
13 dpad_down dpad_down
14 dpad_left dpad_left
15 dpad_right dpad_right
16 力量 右摇杆按钮,开始

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

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

标签: javascriptgame-developmentgamepad-api

解决方案


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


推荐阅读