Siklus hidup game di PlayDrop: pemuatan, siap, jeda, dan audio
Inisialisasi SDK PlayDrop, beri sinyal siap di frame pertama, jeda dan lanjutkan dengan rapi, ikuti kebijakan audio host, dan pramuat berkas untuk main offline.
PlayDrop menampilkan layar pemuatan, menu jeda, kontrol bisu, dan jendela lain miliknya sendiri di sekitar game Anda. API siklus hidup menjaga game tetap selaras dengan semua itu: game berhenti saat PlayDrop menjedanya dan hanya memutar suara saat kebijakan audio PlayDrop mengizinkan.
Inisialisasi, lalu beri sinyal siap
Muat SDK, baca status awal, berlangganan perubahan, siapkan layar pertama, dan baru setelah itu panggil ready(). PlayDrop terus menampilkan layar pemuatannya sampai saat itu.
<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>Panggil ready() setelah layar pertama yang dirancang terlihat dan input berfungsi, bukan sebelum aset dimuat. sdk.host.error(message) memberi tahu PlayDrop bahwa game tidak bisa dimulai. setLoadingState dan firstFrameReady adalah nama lama untuk langkah yang sama; gunakan ready().
Fase: pratinjau, bermain, dan editor
sdk.host.phase bernilai preview, play, atau editor, dan onPhaseChange melaporkan perpindahannya. Pratinjau dan rekaman menampilkan game tanpa sesi sungguhan: jangan pernah menulis simpanan, skor, pencapaian, atau pembelian di luar play. sdk.host.mode bernilai play dalam kondisi normal dan dev di frame Dev lokal.
Jeda dan lanjutkan
onPause(reason) dan onResume(reason) terpicu saat pemain membuka menu jeda, menyembunyikan tab, masuk, membeli sesuatu, atau saat iklan atau jendela PlayDrop menutupi game. reason adalah salah satu dari tab_hidden, auth_prompt, purchase_flow, host_overlay, detail_hidden, route_change, atau native_background; sdk.host.isPaused adalah status saat ini.
Selama dijeda, hentikan simulasi dan timer. Saat dilanjutkan, reset jam frame Anda agar game tidak melompat maju:
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);Tombol Escape dan tombol Menu pada pengontrol adalah milik menu jeda PlayDrop; jangan memetakannya di game Anda. Di game berjaringan, pertahankan koneksi room selama dijeda: menjeda satu pemain tidak boleh menghentikan pemain lain.
Audio
Baca sdk.host.audioAllowed sekali setelah init(), lalu ikuti onAudioAllowedChange. Nilai ini menggabungkan status bisu pemain, fase, dan jeda, serta tetap bernilai true selama jeda karena tab disembunyikan agar musik bisa mempertahankan posisinya. onAudioPolicyChange melaporkan { enabled, reason, volume } jika Anda juga memerlukan alasannya atau volume host.
const audio = new AudioContext();
function setAudio(allowed) {
(allowed ? audio.resume() : audio.suspend()).catch(() => {});
}Audio dimulai dalam keadaan bisu sampai host mengizinkannya, dan browser tetap memerlukan gestur pemain sebelum suara diputar. Pertahankan pengaturan volume di dalam game sebagai batas tambahan; bisu dari host selalu menang. Tangkap promise play() dan resume() yang ditolak.
Pramuat dan main offline di aplikasi
Aplikasi native bisa mengunduh berkas game sebelum game dimulai dan menyimpannya untuk dimainkan secara offline. Deklarasikan berkas itu di catalogue.json:
{
"prefetch": { "required": ["game.js", "assets/level-1.png"], "optional": ["assets/music.mp3"] },
"offlineSupported": true
}Halaman masuk selalu disertakan. Berkas required diunduh sebelum bermain; berkas optional sesudahnya. offlineSupported: true memungkinkan aplikasi menawarkan game secara offline setelah berkas wajibnya tersimpan. Nilai yang tidak valid diabaikan dan tidak pernah memblokir unggahan. Situs web memuat game seperti biasa. Untuk game Instan, berkas wajib menjadi ukuran berkas awal.
Di host yang menyatakan dukungan data perangkat, simpanan, skor, dan pencapaian yang dibuat secara offline tetap berada di perangkat dan disinkronkan setelah online; papan peringkat offline hanya menampilkan skor terbaik pemain itu sendiri. Di browser tidak ada antrean offline, jadi tangani simpanan yang gagal. Apa pun yang dimuat game dari internet tetap memerlukan koneksi.
Haptik
Di aplikasi native, sdk.haptics.selection(), impact("light" | "medium" | "heavy"), dan notification("success" | "warning" | "error") memberikan umpan balik singkat; sdk.haptics.supported menunjukkan apakah host mendukungnya. Panggilan ini tidak berpengaruh apa pun di web dan tidak bergantung pada status bisu.