Cloudsaves voor PlayDrop-games
Sla voortgang op en laad die met sdk.me.appData en sdk.me.updateAppData, voor gasten en ingelogde spelers, met regels voor opslaan, voorbeelden en offline.
Cloudsaves bewaren de voortgang van elke speler in je game op PlayDrop, zodat die meegaat van de website naar de apps. Per speler en game wordt één JSON-object opgeslagen; je hebt geen server of multiplayerkamer nodig.
Lezen en schrijven
Na init() is sdk.me.appData de opgeslagen momentopname: { data, seq, ts_event, ts_arrival }, of null vóór de eerste save. Lees je object uit data. Schrijf het hele object met updateAppData; dat retourneert de opgeslagen momentopname en werkt sdk.me.appData bij.
const sdk = await playdrop.init();
let progress = { level: 1, coins: 0, ...(sdk.me.appData?.data ?? {}) };
let queue = Promise.resolve();
// Resolves with the saved snapshot; rejects when the save failed.
function save(changes) {
progress = { ...progress, ...changes };
const snapshot = { ...progress };
const attempt = queue.then(() => sdk.me.updateAppData(snapshot));
queue = attempt.catch(() => {}); // a failed save must not block the next one
return attempt;
}
try {
await save({ level: 2 });
showSaved();
} catch (error) {
showSaveError(); // progress stays in memory; the next save sends it again
}- Elke schrijfactie vervangt het volledige opgeslagen object: behoud elk veld dat je nog nodig hebt.
- Voer schrijfacties na elkaar uit, zoals hierboven, zodat een oudere save nooit na een nieuwere aankomt, en houd de wachtrij draaiende na een fout.
- Toon ‘Opgeslagen’ pas nadat de promise is geslaagd.
appData.datain het geheugen wijzigen slaat niets op. appDataheeft geen methodenget,setofsave.
Wanneer opslaan
Sla op bij checkpoints, aan het einde van levels en bij aankopen, niet elk frame. Sla nooit op tijdens voorbeelden of opnames: schrijf alleen als sdk.host.phase gelijk is aan play. Houd een save klein en geef hem een versie met een eigen veld, zoals saveVersion: 2, zodat een latere versie van de game hem kan omzetten.
Gasten en ingelogde spelers
Je hoeft sdk.me.isLoggedIn niet te controleren voordat je opslaat: PlayDrop-gasten behouden hun saves ook. Een speler zonder enige sessie houdt de save tijdens dat bezoek in het geheugen, dus een geslaagde schrijfactie bewijst niet dat de save de cloud heeft bereikt. Gebruik isLoggedIn alleen voor functies die een echt account nodig hebben, zoals aankopen en gehoste multiplayer.
Offline
In een browser hebben saves een verbinding nodig en is er geen offlinewachtrij: speel door bij een fout en probeer het opnieuw bij het volgende checkpoint. Hosts die ondersteuning voor apparaatgegevens aangeven, zoals PlayDrop-apps die offline werken, bewaren saves op het apparaat en synchroniseren ze zodra er verbinding is.
Wat saves niet zijn
Saves zijn privé voor één speler en één game. Ze staan los van ranglijsten en prestaties, die hun eigen API's hebben en op PlayDrop verschijnen. Gedeelde gegevens tussen spelers, zoals een wedstrijd of een wereld, horen op een gameserver in de MongoDB-collecties van je game.
Testen
Saves horen bij een geüploade game. Upload minstens één keer een privéversie en test daarna via de url uit het uploadbewijs of via het lokale Dev-frame dat wordt beschreven in publiceren vanuit je AI-app.