# Lokala grupper, handkontroller och telefonkontroller i PlayDrop-spel

Läs fysiska handkontroller och PlayDrops telefonkontroller via sdk.device, följ lokala spelarplatser och deklarera handkontrollsstöd och gruppstorlekar.

Source: https://www.playdrop.ai/sv/create/learn/local-party

En lokal grupp är flera personer som spelar på en skärm, var och en med en handkontroll: en fysisk handkontroll eller en telefon som PlayDrop gör till en handkontroll när man skannar en kod. Ditt spel läser alla handkontroller på samma sätt via SDK:t, på webbplatsen och i apparna.

## Deklarera handkontroller och gruppstorlekar

```json
{
  "types": ["solo", "party"],
  "party": { "local": [1, 2, 3, 4] },
  "controller": { "support": "optional", "type": "simpler" }
}
```

- `controller.support` är `off`, `optional` eller `required`. Deklarera det i varje spel, även `off`.
- `controller.type` anger de minsta kontroller som spelet behöver: `any` (riktningar, Bekräfta och Avbryt), `simpler` (en spak, fyra frontknappar och Menu; telefonkontroller räcker) eller `standard` (styrkors, två klickbara spakar, fyra frontknappar, två axelknappar, två avtryckare och Menu).
- `party.local` anger de exakta spelarantalen på en skärm; `1` kräver typen `solo`. När stöd för handkontroller är på måste varje angivet antal gå att spela med handkontroller.

## Läs handkontroller

```js
await sdk.device.enableControllerInput().catch(() => { /* keep keyboard and touch */ });

const stop = sdk.device.onButton(({ playerIndex, button, pressed }) => {
  if (button === "south" && pressed) jump(playerIndex);
});

function update() {
  for (const slot of sdk.device.localPlayers) {
    const pad = sdk.device.gamepad(slot.playerIndex);
    if (pad?.connected) move(slot.playerIndex, pad.axes[0], pad.axes[1]);
  }
  requestAnimationFrame(update);
}
update();
```

- Anropa `enableControllerInput()` en gång efter `init()`. Anropet avvisas med `controller_input_unavailable` eller `controller_input_timeout` när värden inte kan ge inmatning; spelet fortsätter köra.
- `gamepad(playerIndex)` returnerar en ögonblicksbild i webbläsarens standardlayout: `axes` (vänster x/y, höger x/y från -1 till 1), sjutton `buttons`, `source` (`physical` eller `virtual`) och `id`. `playerIndex` 0 är spelare 1.
- Knappar har positionsnamn som `south` och `east`. `pad.label("south")` ger texten att visa: ”A”, ”Cross” eller ”B” beroende på handkontrollen. `pad.has("dpad")` visar om en kontroll finns.
- Menu och Home tillhör PlayDrop och läses alltid som släppta.
- Anropa aldrig `navigator.getGamepads()`: telefonkontroller når bara spel via SDK:t, och PlayDrop loggar en varning.

## Lokala spelarplatser

`sdk.device.localPlayers` listar platserna som spelarna valde, `{ playerIndex, gamepadKey }`, och `onLocalPlayersChange(callback)` rapporterar ändringar. En frånkopplad handkontroll behåller sin plats. När spelarlistan ändras eller blir tom går du tillbaka till en rimlig meny i stället för att krascha. En ensam handkontroll är vanlig inmatning, inte en grupp.

Från en knapp öppnar `sdk.social.openParty({ mode: "local" })` PlayDrops parkopplingsfönster med telefonens QR-kod och anslutna handkontroller. Erbjud bara de lägen du har deklarerat.

## Lokalt eller online, inte båda

Värden startar ett spel antingen som en lokal grupp eller som en onlinegrupp, aldrig båda: lokala spelare kan inte gå med i onlinerum. För onlinespel med vänner, se [onlinegrupper och röst](https://www.playdrop.ai/sv/create/learn/online-party).

## Designa för soffan

Visa varje spelares färg och knapptext, låt vem som helst trycka på en knapp för att gå med och håll HUD:en läsbar från en soffa. Behåll touch- och tangentbordskontroller för solospel.

## Relaterade guider

- [Onlinegrupper och röst](https://www.playdrop.ai/sv/create/learn/online-party): Låt vänner spela ihop online: deklarera gruppstorlekar, öppna PlayDrops gruppfönster, gå med i reserverade rum med sdk.multiplayer.join och styr rumsröst.
- [Helskärm och säkra områden](https://www.playdrop.ai/sv/create/learn/viewport): Låt ett PlayDrop-spel fylla skärmen och håll HUD:en inom CSS-säkra områden och fri från värdens kontroller med SDK:ts uppmätta reservedCorners.
- [catalogue.json](https://www.playdrop.ai/sv/create/learn/catalogue-json): Fälten i catalogue.json för PlayDrop-spel: identitet, spelsida, spellägen, ytor, inloggning, Instant, förladdning, media, översättningar, poäng och servrar.
