A equipe do Mozilla MozVR estava demonstrando o padrão aberto WebVR e o A-Frame na GDC há algumas semanas e as pessoas ficaram intrigadas; algumas ficaram surpresas com a possibilidade de a Web lidar com a RV, outras provavelmente pensaram que nossa linha de RV era menor (era muito menor) e outras viram o controle do Xbox ao lado dos fones de ouvido de RV e queriam saber como o controle do Microsoft Xbox + RV + Mac + navegador funcionava. Eu estava tão empolgado com tudo isso que entrei na onda imediatamente após retornar da GDC. Vamos ver como tudo isso funciona!
Primeira etapa: driver do controle do Xbox (360Controller)
O 360Controller fornece um projeto lista de versões de drivers para Mac para Xbox, Xbox 360 e Xbox One. A versão mais recente (0.15.0) é necessária para o suporte ao Xbox One. Baixe e instale o pacote fornecido e você verá um rótulo e um ícone “Xbox 360 Controllers” no aplicativo System Preferences. Esse painel de preferências fornece informações sobre o controle do Xbox selecionado e também fornece controles para substituir as configurações:
O senhor deve conectar o controle do Xbox via USB para que o Mac detecte o controle – sem fio não funciona. Pressione os botões e veja a representação de cada botão no aplicativo acender. É possível até mesmo pressionar os botões de gatilho esquerdo e direito e o controle do Xbox tremerá. Sólido!
Segunda etapa: API do gamepad
O API do JavaScript GamePad fornece acesso a controladores no navegador. Comece chamando `navigator.getGamepads()` para obter uma listagem dos gamepads conectados:
var gpads = navigator.getGamepads(); // Array[Gamepad]
O usuário pode conectar um dispositivo durante o jogo (ou a qualquer momento), portanto, o senhor pode usar dois práticos ouvintes de eventos para detectar a conexão e a desconexão:
// Listen for the connection window.addEventListener('gamepadconnected', function(e) { var gpad = navigator.getGamepads()[e.gamepad.index]; // Start the game / animation }); // Oh nooooo, disconnected window.addEventListener('gamepaddisconnected', function(e) { // Pause the game });
A GamePad
fornece as seguintes informações:
Gamepad { axes: Array[6], buttons: Array[15], connected: true, id: "45e-2d1-Xbox One Wired Controller", index: 0, mapping: "", timestamp: 5142195.495 }
A propriedade buttons é interessante: uma matriz de GamepadButton
cada um com um booleano pressed
que descreve se o botão está sendo pressionado no momento. Provavelmente, o senhor esperava (como eu) que houvesse um ouvinte de eventos para pressionar os botões, mas não há: é preciso verificar se o botão está sendo pressionado no loop do jogo (requestAnimationFrame
). É provável que seja feito dessa forma para que o atraso, a latência etc. não causem estragos entre um ouvinte e o estado do jogo. Aqui está um exemplo rápido:
GamepadButton { pressed: false, value: 0 }
O senhor pode ver mais botões pressionados e a reação exemplos na MDN. O senhor também pode dar uma olhada no Testador de Gamepad HTML5 para experimentar o pressionamento de botões e o estado do eixo de qualquer controlador.
Etapa 3: O jogo: Tanx
O jogo apresentado com VR + controle Xbox + Gamepad API foi uma versão especial em 3D do Tanx da PlayCanvas. O visual era incrível e as pessoas adoraram o jogo em um estado 3D aprimorado. Desculpe-me, mas não tenho um link para uma versão pública no momento!
É isso mesmo: é possível conectar o controle do Xbox ao Mac e jogar jogos em HTML5 compatíveis com a API do Gamepad com um driver especial e um pouco de mágica JavaScript!