Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
(1 edit)

It's true. I have same problem.

https://developer.mozilla.org/en-US/docs/Web/API/G...

Note: These events are not fired in Chrome, only Firefox. In Chrome you have to use Navigator.getGamepads() to access Gamepad objects.

ps

You need use navigator.getGamepads() in your update loop function

My example for browser console:

//gamepads
let pad0 = null;
let pad1 = null;
let pad2 = null;
let pad3 = null;

// gamepads connected status
let gamepadConnected = {
0: false, // false == pad0 disconnected, true == pad0 connected
1: false, // false == pad1 disconnected, true == pad1 connected
2: false,
3: false,
};

//connect callback
function padConnect(pad) {
console.log('gamepad connected, index: ' + (pad.index));
}

//disconnect callback
function padDisconnect(padIndex) {
console.log('gamepad disconnected, index: ' + (padIndex));
}

//'gamepadconnected' and 'gamepaddisconnected' events
function padConnectionCheck() {
//pad0
if (pad0 !== null && !gamepadConnected[0]) {
gamepadConnected[0] = true; // set 'connected' status
padConnect(pad0); //connected callback
} else if (pad0 === null && gamepadConnected[0]) {
gamepadConnected[0] = false; // set 'disconnected' status
this.padDisconnect(0); //'disconnected' callback you need to use index of gamepad, because gamepad == null
}
//pad1
if (pad1 !== null && !gamepadConnected[1]) {
gamepadConnected[1] = true;
padConnect(pad1);
} else if (pad1 === null && gamepadConnected[1]) {
gamepadConnected[1] = false;
this.padDisconnect(1);
}
//pad2
if (pad2 !== null && !gamepadConnected[2]) {
gamepadConnected[2] = true;
padConnect(pad2);
} else if (pad2 === null && gamepadConnected[2]) {
gamepadConnected[2] = false;
this.padDisconnect(2);
}
//pad3
if (pad3 !== null && !gamepadConnected[3]) {
gamepadConnected[3] = true;
padConnect(pad3);
} else if (pad0 === null && gamepadConnected[3]) {
gamepadConnected[3] = false;
this.padDisconnect(3);
}
}

//gamepad update loop

function gamepadUpdate() {
pad0 = navigator.getGamepads()[0];
pad1 = navigator.getGamepads()[1];
pad2 = navigator.getGamepads()[2];
pad3 = navigator.getGamepads()[3];

padConnectionCheck();

}
setInterval(gamepadUpdate, 50);

//game update loop
function gameUpdate() {
if (pad0 !== null && pad0.buttons[/*button index 0-14*/ 14].pressed) {
//do something
console.log('Dpad Left Pressed');
}
}
setInterval(gameUpdate, 50);