# PlayDrop oyunlarında yerel parti, fiziksel ve telefon kumandaları

Fiziksel kumandaları ve PlayDrop telefon kumandalarını sdk.device ile oku, yerel oyuncu yuvalarını izle, kumanda desteğini ve yerel parti boyutlarını bildir.

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

Yerel parti, aynı ekranda her biri bir kumandayla oynayan birkaç kişidir: fiziksel bir kumanda ya da PlayDrop’un bir kod okutarak kumandaya dönüştürdüğü bir telefon. Oyunun her kumandayı web sitesinde ve uygulamalarda SDK üzerinden aynı şekilde okur.

## Kumandaları ve parti boyutlarını bildir

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

- `controller.support` değeri `off`, `optional` veya `required` olur. `off` dahil her oyunda bildir.
- `controller.type`, oyunun gerektirdiği en az kontrolleri belirtir: `any` (yönler, Onayla ve İptal), `simpler` (bir analog çubuk, dört ön düğme ve Menü; telefon kumandaları buna uyar) ya da `standard` (yön tuşları, basılabilir iki analog çubuk, dört ön düğme, iki omuz düğmesi, iki tetik ve Menü).
- `party.local`, tek ekrandaki tam oyuncu sayılarını listeler; `1` için `solo` türü gerekir. Kumanda desteği açıkken listelenen her sayı kumandalarla oynanabilir olmalıdır.

## Kumandaları oku

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

- `enableControllerInput()` fonksiyonunu `init()` sonrasında bir kez çağır. Ana uygulama girdi sağlayamadığında `controller_input_unavailable` veya `controller_input_timeout` ile reddedilir; oyun çalışmaya devam eder.
- `gamepad(playerIndex)`, tarayıcının standart düzeninde bir anlık görüntü döndürür: `axes` (-1 ile 1 arasında sol x/y, sağ x/y), on yedi `buttons`, `source` (`physical` veya `virtual`) ve `id`. `playerIndex` 0, 1. oyuncudur.
- Düğmelerin `south` ve `east` gibi konumsal adları vardır. `pad.label("south")` ekranda gösterilecek düğme adını verir: kumandaya göre “A”, “Cross” ya da “B”. `pad.has("dpad")` bir kontrolün var olup olmadığını söyler.
- Menü ve Ana Sayfa düğmeleri PlayDrop’a aittir ve her zaman bırakılmış olarak okunur.
- Asla `navigator.getGamepads()` çağırma: telefon kumandaları oyunlara yalnızca SDK üzerinden ulaşır ve PlayDrop bir uyarı kaydeder.

## Yerel oyuncu yuvaları

`sdk.device.localPlayers` oyuncuların seçtiği yuvaları (`{ playerIndex, gamepadKey }`) listeler, `onLocalPlayersChange(callback)` ise değişiklikleri bildirir. Bağlantısı kopan bir kumanda yuvasını korur. Oyuncu listesi değiştiğinde ya da boşaldığında çökmek yerine mantıklı bir menüye dön. Tek başına bir kumanda sıradan bir girdidir, parti değildir.

Bir düğmeden çağrılan `sdk.social.openParty({ mode: "local" })`, PlayDrop’un telefon QR koduyla ve bağlı fiziksel kumandalarla eşleştirme penceresini açar. Yalnızca bildirdiğin modları sun.

## Yerel ya da çevrimiçi, ikisi birden değil

Ana uygulama bir oyunu ya yerel ya da çevrimiçi bir parti olarak başlatır, asla ikisini birden: yerel oyuncular çevrimiçi odalara katılamaz. Arkadaşlarla çevrimiçi oyun için bkz. [çevrimiçi partiler ve sesli sohbet](https://www.playdrop.ai/tr/create/learn/online-party).

## Kanepe için tasarla

Her oyuncunun rengini ve kumanda düğme ipuçlarını göster, herkesin bir düğmeye basarak katılabilmesini sağla ve HUD’u kanepeden okunabilir tut. Tek oyunculu oyun için dokunmatik ve klavye kontrollerini koru.

## İlgili kılavuzlar

- [Çevrimiçi partiler ve sesli sohbet](https://www.playdrop.ai/tr/create/learn/online-party): Arkadaşlar oyununu çevrimiçi oynasın: parti boyutlarını bildir, parti penceresini aç, sdk.multiplayer.join ile ayrılmış odaya katıl, oda sesli sohbetini yönet.
- [Tam ekran ve güvenli alanlar](https://www.playdrop.ai/tr/create/learn/viewport): PlayDrop oyununun ekranı doldurmasını sağla, HUD’u CSS güvenli alanlarında ve SDK’nın ölçtüğü reservedCorners ile ana uygulama kontrollerinden uzak tut.
- [catalogue.json](https://www.playdrop.ai/tr/create/learn/catalogue-json): PlayDrop oyunlarının kullandığı catalogue.json alanları: kimlik, oyun sayfası, oynanış modları, yüzeyler, giriş, Instant, ön yükleme, medya, çeviriler, skorlar ve sunucular.
