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.
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.
<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:
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.
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 içinde bildir:
{
"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 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.