# Lokale grupper, spillkontrollere og telefonkontrollere på PlayDrop

Les fysiske spillkontrollere og PlayDrops telefonkontrollere via sdk.device, følg lokale spillerplasser, og deklarer kontrollerstøtte og gruppestørrelser.

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

En lokal gruppe er flere personer som spiller på én skjerm, hver med en kontroller: en fysisk spillkontroller eller en telefon som PlayDrop gjør om til en kontroller ved å skanne en kode. Spillet ditt leser alle kontrollere på samme måte via SDK-en, på nettstedet og i appene.

## Deklarer kontrollere og gruppestørrelser

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

- `controller.support` er `off`, `optional` eller `required`. Deklarer det for hvert spill, også `off`.
- `controller.type` angir de minste kontrollene spillet trenger: `any` (retninger, Bekreft og Avbryt), `simpler` (én stikke, fire frontknapper og Meny; telefonkontrollere oppfyller dette) eller `standard` (styrekors, to klikkbare stikker, fire frontknapper, to skulderknapper, to avtrekkere og Meny).
- `party.local` lister de nøyaktige spillerantallene på én skjerm; en `1` krever typen `solo`. Med kontrollerstøtte slått på må hvert oppført antall kunne spilles med kontrollere.

## Les kontrollere

```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();
```

- Kall `enableControllerInput()` én gang etter `init()`. Kallet avvises med `controller_input_unavailable` eller `controller_input_timeout` når verten ikke kan levere inndata; spillet fortsetter å kjøre.
- `gamepad(playerIndex)` returnerer et øyeblikksbilde i nettleserens standardoppsett: `axes` (venstre x/y, høyre x/y fra -1 til 1), sytten `buttons`, `source` (`physical` eller `virtual`) og `id`. `playerIndex` 0 er spiller 1.
- Knappene har posisjonsnavn som `south` og `east`. `pad.label("south")` gir teksten som skal vises: «A», «Cross» eller «B», avhengig av kontrolleren. `pad.has("dpad")` forteller om en kontroll finnes.
- Meny og Hjem hører til PlayDrop og leses alltid som sluppet.
- Kall aldri `navigator.getGamepads()`: telefonkontrollere når bare frem til spill via SDK-en, og PlayDrop logger en advarsel.

## Lokale spillerplasser

`sdk.device.localPlayers` lister plassene spillerne har valgt, `{ playerIndex, gamepadKey }`, og `onLocalPlayersChange(callback)` rapporterer endringer. En frakoblet kontroller beholder plassen sin. Når spillerlisten endres eller blir tom, går du tilbake til en fornuftig meny i stedet for å krasje. Én kontroller alene er vanlig inndata, ikke en gruppe.

Fra en knapp åpner `sdk.social.openParty({ mode: "local" })` PlayDrops paringsvindu med QR-koden for telefoner og tilkoblede spillkontrollere. Tilby bare modusene du har deklarert.

## Lokalt eller på nett, ikke begge deler

Verten starter et spill enten som en lokal gruppe eller som en nettgruppe, aldri begge deler: lokale spillere kan ikke bli med i rom på nett. For spill på nett med venner, se [nettgrupper og stemme](https://www.playdrop.ai/nb/create/learn/online-party).

## Design for sofaen

Vis hver spillers farge og kontrollertekst, la hvem som helst trykke på en knapp for å bli med, og hold HUD-en lesbar fra en sofa. Behold berørings- og tastaturkontroller for solospill.

## Relaterte veiledninger

- [Nettgrupper og stemme](https://www.playdrop.ai/nb/create/learn/online-party): La venner spille sammen på nett: deklarer gruppestørrelser, åpne PlayDrops gruppevindu, bli med i reserverte rom med sdk.multiplayer.join og styr romstemme.
- [Fullskjerm og trygge områder](https://www.playdrop.ai/nb/create/learn/viewport): Få et PlayDrop-spill til å fylle skjermen, og hold HUD-en innenfor CSS-trygge områder og unna vertens kontroller med SDK-ens målte reservedCorners.
- [catalogue.json](https://www.playdrop.ai/nb/create/learn/catalogue-json): catalogue.json-feltene PlayDrop-spill bruker: identitet, oppføring, spillmåter, flater, innlogging, Instant, forhåndslasting, medier, oversettelser, poeng og servere.
