Gamepad API a Xbox Controller na Macu

Tým Mozilla MozVR před několika týdny na GDC demonstroval otevřený standard WebVR a také A-Frame a lidi to zaujalo. někteří byli překvapeni, že web zvládá VR, někteří pravděpodobně si mysleli, že naše řada VR je menší (bylo to na míle daleko), a jiní viděli ovladač Xbox vedle náhlavních souprav pro VR a chtěli vědět, jak vůbec Microsoft Xbox ovladač + VR + Mac + prohlížeč pracoval. Z toho všeho jsem byl tak nadšený, že jsem na to skočil hned po návratu z GDC. Pojďme se podívat, jak to všechno funguje!

Krok 1: Ovladač ovladače Xbox (360Controller)

Projekt 360Controller poskytuje seznam vydaných ovladačů pro Mac pro Xbox, Xbox 360 a Xbox One. Pro podporu Xbox One je vyžadována nejnovější verze (0.15.0). Stáhněte a nainstalujte dodaný balíček a v aplikaci System Preferences uvidíte štítek a ikonu „Ovladače Xbox 360“. Tento panel předvoleb poskytuje informace o vybraném ovladači Xbox a také ovládací prvky pro přepsání nastavení:

Aby počítač Mac detekoval ovladač, musíte ovladač Xbox připojit přes USB – bezdrátové připojení nebude fungovat. Stiskněte tlačítka a sledujte, jak se každé tlačítko v aplikaci rozsvítí. Můžete dokonce stisknout levé a pravé tlačítko spouště a ovladač Xbox se zatřese. Pevné!

Krok 2: Gamepad API

JavaScript GamePad API poskytuje přístup k ovladačům v prohlížeči. Začněte voláním `navigator.getGamepads()`, abyste získali seznam připojených gamepadů:

var gpads = navigator.getGamepads(); // Array[Gamepad]

Uživatel může připojit zařízení během hry (nebo kdykoli v tomto případě), takže můžete ke zjištění připojení a odpojení použít dva praktické posluchače událostí:

// 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 objekt poskytuje následující informace:

Gamepad {
  axes: Array[6],
  buttons: Array[15],
  connected: true,
  id: "45e-2d1-Xbox One Wired Controller",
  index: 0,
  mapping: "",
  timestamp: 5142195.495
}

Zajímavá je vlastnost buttons:pole GamepadButton objektů, z nichž každý má logickou hodnotu pressed hodnoty popisující, zda je tlačítko právě stisknuto. Pravděpodobně jste doufali (stejně jako já), že bude existovat posluchač událostí pro stisknutí tlačítek, ale není – musíte provést kontrolu stisknutí tlačítka ve smyčce vaší hry (requestAnimationFrame ). Pravděpodobně se to dělá tak, aby zpoždění, latence atd. nezpůsobily zmatek mezi posluchačem a stavem hry. Zde je rychlý příklad:

GamepadButton {
  pressed: false,
  value: 0
}

Další příklady stisknutí tlačítka a reakce můžete vidět na MDN. Můžete si také vyzkoušet HTML5 Gamepad Tester a experimentovat se stiskem tlačítka a stavem osy pro jakýkoli daný ovladač.

Krok 3: Hra:Tanx

Hra představená s VR + Xbox ovladačem + Gamepad API byla speciální 3D sestavení Tanx od PlayCanvas. Vizuál byl úžasný a lidé milovali hru ve vylepšeném 3D stavu. Omlouvám se, v tuto chvíli nemám odkaz na veřejnou verzi!

Tady to máte – svůj ovladač Xbox můžete připojit k Macu a hrát hry HTML5, které podporují rozhraní Gamepad API, se speciálním ovladačem a trochou magie JavaScriptu!