# Lokale Partys, Gamepads und Handy-Controller in PlayDrop-Spielen

Physische Gamepads und PlayDrop-Handy-Controller über sdk.device lesen, lokale Spielerplätze verfolgen, Controller-Unterstützung und Partygrößen deklarieren.

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

Eine lokale Party sind mehrere Leute, die an einem Bildschirm spielen, jeder mit einem Controller: einem physischen Gamepad oder einem Handy, das PlayDrop durch das Scannen eines Codes zum Controller macht. Dein Spiel liest jeden Controller auf dieselbe Weise über das SDK, auf der Website und in den Apps.

## Controller und Partygrößen deklarieren

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

- `controller.support` ist `off`, `optional` oder `required`. Deklariere es bei jedem Spiel, auch `off`.
- `controller.type` nennt die Mindestausstattung, die das Spiel braucht: `any` (Richtungen, Bestätigen und Abbrechen), `simpler` (ein Stick, vier Aktionstasten und Menü; Handy-Controller erfüllen das) oder `standard` (Steuerkreuz, zwei klickbare Sticks, vier Aktionstasten, zwei Schultertasten, zwei Trigger und Menü).
- `party.local` listet die genauen Spielerzahlen an einem Bildschirm auf; eine `1` erfordert den Typ `solo`. Ist die Controller-Unterstützung aktiv, muss jede aufgeführte Zahl mit Controllern spielbar sein.

## Controller lesen

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

- Rufe `enableControllerInput()` einmal nach `init()` auf. Der Aufruf wird mit `controller_input_unavailable` oder `controller_input_timeout` abgelehnt, wenn der Host keine Eingabe liefern kann; das Spiel läuft weiter.
- `gamepad(playerIndex)` liefert einen Snapshot im Standardlayout des Browsers: `axes` (links x/y, rechts x/y von -1 bis 1), siebzehn `buttons`, `source` (`physical` oder `virtual`) und `id`. `playerIndex` 0 ist Spieler 1.
- Tasten haben Namen nach ihrer Position, etwa `south` und `east`. `pad.label("south")` liefert die Beschriftung, die du anzeigen solltest: „A“, „Cross“ oder „B“, je nach Controller. `pad.has("dpad")` sagt, ob ein Bedienelement vorhanden ist.
- Menü und Home gehören PlayDrop und gelten immer als losgelassen.
- Rufe niemals `navigator.getGamepads()` auf: Handy-Controller erreichen Spiele nur über das SDK, und PlayDrop protokolliert eine Warnung.

## Lokale Spielerplätze

`sdk.device.localPlayers` listet die Plätze auf, die Spieler gewählt haben, `{ playerIndex, gamepadKey }`, und `onLocalPlayersChange(callback)` meldet Änderungen. Ein getrennter Controller behält seinen Platz. Wenn sich die Besetzung ändert oder leer wird, kehre zu einem sinnvollen Menü zurück, statt abzustürzen. Ein einzelner Controller ist eine gewöhnliche Eingabe, keine Party.

Über einen Button öffnet `sdk.social.openParty({ mode: "local" })` das Kopplungsfenster von PlayDrop mit dem QR-Code für Handys und den verbundenen Gamepads. Biete nur die Modi an, die du deklariert hast.

## Lokal oder online, nicht beides

Der Host startet ein Spiel entweder als lokale Party oder als Online-Party, nie beides: Lokale Spieler können keinen Online-Räumen beitreten. Für Online-Spiel mit Freunden siehe [Online-Partys und Sprachchat](https://www.playdrop.ai/de/create/learn/online-party).

## Fürs Sofa gestalten

Zeige die Farbe und die Tastenbeschriftung jedes Spielers, lass jeden per Tastendruck beitreten und halte das HUD vom Sofa aus lesbar. Behalte Touch- und Tastatursteuerung für das Spielen allein bei.

## Verwandte Anleitungen

- [Online-Partys und Sprachchat](https://www.playdrop.ai/de/create/learn/online-party): Freunde online zusammen spielen lassen: Partygrößen deklarieren, Party-Fenster öffnen, mit sdk.multiplayer.join reservierte Räume betreten, Sprachchat steuern.
- [Vollbild und sichere Bereiche](https://www.playdrop.ai/de/create/learn/viewport): PlayDrop-Spiel bildschirmfüllend machen, HUD in sicheren Bereichen und mit den gemessenen reservedCorners des SDK frei von Host-Bedienelementen halten.
- [catalogue.json](https://www.playdrop.ai/de/create/learn/catalogue-json): Die catalogue.json-Felder, die PlayDrop-Spiele verwenden: Identität, Texte, Spielweise, Formate, Anmeldung, Sofort, Vorladen, Medien, Übersetzungen, Punktestände und Server.
