Levenscyclus van een PlayDrop-game: laden, klaar, pauze en audio
Initialiseer de PlayDrop-SDK, meld klaar bij het eerste speelbare frame, pauzeer en hervat netjes, volg het audiobeleid en laad vooraf voor apps en offline.
PlayDrop toont rond je game een eigen laadscherm, pauzemenu, dempknop en andere vensters. De levenscyclus-API houdt de game daarmee in de pas: hij stopt zolang PlayDrop hem pauzeert en speelt alleen geluid af als het audiobeleid van PlayDrop dat toestaat.
Initialiseer en meld daarna klaar
Laad de SDK, lees de begintoestand, abonneer je op wijzigingen, maak het eerste scherm klaar en roep pas dan ready() aan. Tot dat moment laat PlayDrop zijn laadscherm staan.
<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>Roep ready() aan zodra het ontworpen eerste scherm zichtbaar is en de invoer werkt, niet voordat de assets geladen zijn. sdk.host.error(message) laat PlayDrop weten dat de game niet kan starten. setLoadingState en firstFrameReady zijn oudere namen voor dezelfde stap; gebruik ready().
Fasen: voorbeeld, spelen en editor
sdk.host.phase is preview, play of editor, en onPhaseChange meldt wisselingen. Voorbeelden en opnames tonen de game zonder echte sessie: schrijf buiten play nooit saves, scores, prestaties of aankopen weg. sdk.host.mode is normaal play en dev in het lokale Dev-frame.
Pauzeren en hervatten
onPause(reason) en onResume(reason) worden geactiveerd wanneer de speler het pauzemenu opent, het tabblad verbergt, inlogt of iets koopt, of wanneer een advertentie of een PlayDrop-venster de game bedekt. reason is een van tab_hidden, auth_prompt, purchase_flow, host_overlay, detail_hidden, route_change of native_background; sdk.host.isPaused is de huidige toestand.
Stop tijdens de pauze de simulatie en de timers. Zet bij het hervatten je frameklok terug, zodat de game niet vooruitspringt:
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 en de Menu-knop van een controller horen bij het pauzemenu van PlayDrop; koppel ze niet aan acties in je game. Houd in een netwerkgame de verbinding met de kamer actief tijdens de pauze: als één speler pauzeert, mogen de anderen niet stilvallen.
Audio
Lees sdk.host.audioAllowed één keer na init() en volg daarna onAudioAllowedChange. Het combineert het dempen door de speler, de fase en de pauze, en blijft true tijdens een pauze door een verborgen tabblad, zodat muziek haar positie kan behouden. onAudioPolicyChange meldt { enabled, reason, volume } als je ook de reden of het volume van de host nodig hebt.
const audio = new AudioContext();
function setAudio(allowed) {
(allowed ? audio.resume() : audio.suspend()).catch(() => {});
}Audio begint gedempt tot de host het toestaat, en browsers hebben nog steeds een actie van de speler nodig voordat er geluid klinkt. Houd een volume-instelling in de game aan als extra limiet; het dempen door de host wint altijd. Vang geweigerde promises van play() en resume() af.
Vooraf laden en offline spelen in de apps
De native apps kunnen de bestanden van een game downloaden voordat hij start en ze bewaren om offline te spelen. Declareer ze in catalogue.json:
{
"prefetch": { "required": ["game.js", "assets/level-1.png"], "optional": ["assets/music.mp3"] },
"offlineSupported": true
}De startpagina hoort er altijd bij. Bestanden in required worden vóór het spelen opgehaald, die in optional daarna. Met offlineSupported: true kunnen de apps de game offline aanbieden zodra de vereiste bestanden zijn opgeslagen. Ongeldige waarden worden genegeerd en blokkeren nooit een upload. De website laadt games zoals gewoonlijk. Voor Instantgames bepalen de vereiste bestanden de startgrootte.
Op hosts die ondersteuning voor apparaatgegevens aangeven, blijven saves, scores en prestaties die offline zijn behaald op het apparaat en worden ze gesynchroniseerd zodra er verbinding is; offline tonen ranglijsten alleen het eigen record van de speler. In een browser is er geen offlinewachtrij, dus vang een mislukte save af. Alles wat de game van internet laadt, heeft nog steeds een verbinding nodig.
Haptische feedback
In de native apps geven sdk.haptics.selection(), impact("light" | "medium" | "heavy") en notification("success" | "warning" | "error") korte feedback; sdk.haptics.supported meldt of de host dat kan. Op het web doen ze niets, en ze staan los van dempen.