# PlayDrop’ta oyun yaşam döngüsü: yükleme, hazır, duraklatma ve ses

SDK’yı başlat, ilk oynanabilir karede hazır sinyali ver, duraklat ve sürdür, ses politikasına uy ve çevrimdışı oyun için dosyaları önceden yükle.

Source: https://www.playdrop.ai/tr/create/learn/lifecycle

PlayDrop, oyununun çevresinde kendi yükleme ekranını, duraklatma menüsünü, sessize alma kontrolünü ve başka pencereleri gösterir. Yaşam döngüsü API’si oyunu bunlarla uyumlu tutar: PlayDrop oyunu duraklattığında oyun durur ve yalnızca PlayDrop’un ses politikası izin verdiğinde ses çalar.

## Başlat, sonra hazır sinyali ver

SDK’yı yükle, ilk durumu oku, değişikliklere abone ol, ilk ekranı hazırla ve ancak ondan sonra `ready()` çağır. PlayDrop o zamana kadar yükleme ekranını açık tutar.

```html
<script src="https://assets.playdrop.ai/sdk/playdrop.js"></script>
<script type="module">
  const sdk = await playdrop.init();
  let paused = sdk.host.isPaused;
  setAudio(sdk.host.audioAllowed);
  sdk.host.onAudioAllowedChange(setAudio);
  sdk.host.onPause(() => { paused = true; });
  sdk.host.onResume(() => { paused = false; last = performance.now(); });

  try {
    await loadFirstLevel();
  } catch (error) {
    sdk.host.error("Could not load the first level");
    throw error;
  }
  drawFirstFrame();
  sdk.host.ready();
</script>
```

`ready()` çağrısını asset’ler yüklenmeden önce değil, tasarlanan ilk ekran görünür olduğunda ve girdi çalıştığında yap. `sdk.host.error(message)`, PlayDrop’a oyunun başlayamayacağını söyler. `setLoadingState` ve `firstFrameReady` aynı adımın eski adlarıdır; `ready()` kullan.

## Aşamalar: önizleme, oynanış ve düzenleyici

`sdk.host.phase` değeri `preview`, `play` veya `editor` olur ve `onPhaseChange` geçişleri bildirir. Önizlemeler ve görüntü yakalamaları oyunu gerçek bir oturum olmadan gösterir: `play` dışında asla kayıt, puan, başarım ya da satın alım yazma. `sdk.host.mode` normalde `play`, yerel Dev çerçevesinde ise `dev` olur.

## Duraklat ve sürdür

`onPause(reason)` ve `onResume(reason)`, oyuncu duraklatma menüsünü açtığında, sekmeyi gizlediğinde, giriş yaptığında, bir şey satın aldığında ya da bir reklam veya PlayDrop penceresi oyunun üzerini örttüğünde tetiklenir. `reason` şunlardan biridir: `tab_hidden`, `auth_prompt`, `purchase_flow`, `host_overlay`, `detail_hidden`, `route_change` veya `native_background`; `sdk.host.isPaused` mevcut durumu verir.

Duraklatılmışken simülasyonu ve zamanlayıcıları durdur. Sürdürürken oyun ileri atlamasın diye kare saatini sıfırla:

```js
let last = performance.now();
function frame(now) {
  const dt = paused ? 0 : Math.min((now - last) / 1000, 0.05);
  last = now;
  if (!paused) update(dt);
  render();
  requestAnimationFrame(frame);
}
requestAnimationFrame(frame);
```

Escape tuşu ve kumandanın Menü düğmesi PlayDrop’un duraklatma menüsüne aittir; bunlara oyununda işlev atama. Ağ üzerinden oynanan bir oyunda duraklatılmışken oda bağlantısını canlı tut: bir oyuncuyu duraklatmak diğerlerini durdurmamalıdır.

## Ses

`sdk.host.audioAllowed` değerini `init()` sonrasında bir kez oku, sonra `onAudioAllowedChange` ile değişiklikleri izle. Bu değer oyuncunun sessize almasını, aşamayı ve duraklatmayı birleştirir; müzik konumunu koruyabilsin diye gizli sekme duraklatması sırasında true kalır. Nedene ya da ana uygulamanın ses düzeyine de ihtiyacın olduğunda `onAudioPolicyChange`, `{ enabled, reason, volume }` bildirir.

```js
const audio = new AudioContext();
function setAudio(allowed) {
  (allowed ? audio.resume() : audio.suspend()).catch(() => {});
}
```

Ses, ana uygulama izin verene kadar kapalı başlar ve tarayıcılar ses çalmadan önce yine de bir oyuncu hareketi ister. Oyun içi ses düzeyi ayarını ek bir sınır olarak tut; ana uygulamanın sessize alması her zaman kazanır. Reddedilen `play()` ve `resume()` promise’lerini yakala.

## Uygulamalarda önceden yükle ve çevrimdışı oyna

Yerel uygulamalar bir oyunun dosyalarını oyun başlamadan önce indirebilir ve çevrimdışı oyun için saklayabilir. Bunları [catalogue.json](https://www.playdrop.ai/tr/create/learn/catalogue-json) içinde bildir:

```json
{
  "prefetch": { "required": ["game.js", "assets/level-1.png"], "optional": ["assets/music.mp3"] },
  "offlineSupported": true
}
```

Giriş sayfası her zaman dahildir. `required` dosyalar oynanıştan önce, `optional` dosyalar sonra indirilir. `offlineSupported: true`, gerekli dosyalar saklandıktan sonra uygulamaların oyunu çevrimdışı sunmasını sağlar. Geçersiz değerler yok sayılır ve bir yüklemeyi asla engellemez. Web sitesi oyunları her zamanki gibi yükler. [Instant](https://www.playdrop.ai/tr/create/learn/instant-games) oyunlarda gerekli dosyalar başlangıç boyutunu oluşturur.

Cihaz verisi desteği bildiren ana uygulamalarda çevrimdışı yapılan kayıtlar, puanlar ve başarımlar cihazda kalır ve çevrimiçi olunca eşitlenir; çevrimdışı liderlik tabloları yalnızca oyuncunun kendi en iyi puanını gösterir. Tarayıcıda çevrimdışı kuyruk yoktur, bu yüzden başarısız bir kaydı ele al. Oyunun internetten yüklediği her şey yine bağlantı gerektirir.

## Dokunsal geri bildirim

Yerel uygulamalarda `sdk.haptics.selection()`, `impact("light" | "medium" | "heavy")` ve `notification("success" | "warning" | "error")` kısa geri bildirim verir; `sdk.haptics.supported` ana uygulamanın bunu yapıp yapamayacağını söyler. Web’de hiçbir şey yapmazlar ve sessize almadan bağımsızdırlar.

## İlgili kılavuzlar

- [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.
- [Bulut kayıtları](https://www.playdrop.ai/tr/create/learn/cloud-saves): İlerlemeyi sdk.me.appData ve sdk.me.updateAppData ile kaydet ve yükle; misafirler ve giriş yapmış oyuncular için yazma, önizleme ve çevrimdışı kuralları.
- [Instant oyunlar](https://www.playdrop.ai/tr/create/learn/instant-games): Bir PlayDrop oyununu Instant yapan şey: dikey oynanış, misafir erişimi, en fazla 10 MiB başlangıç dosyası ve iki saniyede başlama; normal oyundan farkı.
- [İstemci SDK’sı](https://www.playdrop.ai/tr/create/learn/sdk): PlayDrop tarayıcı SDK’sı: yaşam döngüsü, kimlik ve kayıtlar, kumandalar, sosyal, çok oyunculu, mağaza, reklamlar, liderlik tabloları, asset’ler ve yapay zeka.
