Skip to content
uupaa edited this page Aug 25, 2018 · 47 revisions

GamePad.js は Gamepad API を使いやすくラップしたものです。

var pad = new GamePad() で、ゲームパッドの接続を待ちます。
pad[0] に最初に接続したパッドの情報が入ります。パッドは同時に4つまで接続できます。

var pad = new GamePad(function(connect(player) { // @arg UINT8 - player number. 0 - 3
    console.log("connected. player: " + player); // player は 0 から 3 までの値です
});

function gameUpdate() { }
function gameRender() { }
function gameLoop() {
    if (pad.connected) { // 接続中のパッドがあれば true
        pad.input();     // 最新のボタンやスティックの状態をスキャンします

        if (pad[0]) { // 最初に接続されたパッドがまだ有効なら true になります
            input(pad[0].values, // パッドのボタンやスティックの現在値
                  pad[0].diffs); // 前回との差分情報
        }
        if (pad[1]) { // 2番目に接続されたパッドがまだ有効なら true になります
            input(pad[1].values, // パッドのボタンやスティックの現在値
                  pad[1].diffs); // 前回との差分情報
        }
        if (pad[2]) { ... } // 3番目(略)
        if (pad[3]) { ... } // 4番目(略)
    }
    gameUpdate();
    gameRender();
    requestAnimationFrame(gameLoop);
}
gameLoop();

function input(values,  // @arg Uint8Array - current values
               diffs) { // @arg Uint8Array - diff values
    // values = [U, R, D, L, A, B, C, X, Y, Z, L1, R1, L3, R3, S1, S2, LX, LY, RX, RY, L2, R2]
    // diffs  = [U, R, D, L, A, B, C, X, Y, Z, L1, R1, L3, R3, S1, S2, LX, LY, RX, RY, L2, R2]
    // --- Aボタンで Jump ---
    if (diffs[GAMEPAD_KEY_A]) {
        if (values[GAMEPAD_KEY_A]) { // A BUTTON OFF -> ON
            startJump(...);
        } else {           // A BUTTON ON -> OFF
            endJump(...);
        }
    }

    // --- 十字キーの左右で移動 ---
    if (values[GAMEPAD_KEY_L]) {
        moveLeft(...);
    } else if (values[GAMEPAD_KEY_R]) {
        moveRight(...);
    }
}

サポートしているデバイスの一覧も御覧ください。

Clone this wiki locally