Skylagring for PlayDrop-spill
Lagre og hent fremgang med sdk.me.appData og updateAppData for gjester og innloggede spillere, med regler for skriving, forhåndsvisninger og spill uten nett.
Skylagring tar vare på hver spillers fremgang i spillet ditt på PlayDrop, slik at den følger spilleren fra nettstedet til appene. Ett JSON-objekt per spiller og spill lagres; du trenger ingen server eller flerspillerrom.
Les og skriv
Etter init() er sdk.me.appData det lagrede øyeblikksbildet: { data, seq, ts_event, ts_arrival }, eller null før den første lagringen. Les objektet ditt fra data. Skriv hele objektet med updateAppData, som returnerer det lagrede øyeblikksbildet og oppdaterer sdk.me.appData.
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
}- Hver skriving erstatter hele det lagrede objektet: behold alle feltene du fortsatt trenger.
- Utfør skrivinger etter hverandre, som ovenfor, slik at en eldre lagring aldri kommer frem etter en nyere, og hold køen i gang etter en feil.
- Vis «Lagret» først når promisen er oppfylt. Å endre
appData.datai minnet lagrer ingenting. appDatahar ikke metodeneget,setellersave.
Når du skal lagre
Lagre ved sjekkpunkter, slutten av brett og kjøp i stedet for i hvert bilde. Lagre aldri under forhåndsvisninger eller opptak: skriv bare når sdk.host.phase er play. Hold lagringen liten og versjonert med et eget felt, som saveVersion: 2, slik at en senere versjon av spillet kan migrere den.
Gjester og innloggede spillere
Du trenger ikke sjekke sdk.me.isLoggedIn før du lagrer: PlayDrop-gjester beholder også lagringene sine. En spiller uten noen økt i det hele tatt beholder lagringen i minnet under det besøket, så en fullført skriving beviser ikke at lagringen kom frem til skyen. Bruk isLoggedIn bare for funksjoner som krever en ekte konto, som kjøp og hostet flerspiller.
Uten nett
I en nettleser krever lagring nettverkstilkobling, og det finnes ingen kø for lagringer uten nett: fortsett å spille ved feil og prøv igjen ved neste sjekkpunkt. Verter som oppgir støtte for enhetsdata, som PlayDrop-apper som fungerer uten nett, beholder lagringer på enheten og synkroniserer dem når de er på nett.
Hva lagringer ikke er
Lagringer er private for én spiller og ett spill. De er atskilt fra topplister og prestasjoner, som har egne API-er og vises på PlayDrop. Tilstand som deles mellom spillere, som en kamp eller en verden, hører hjemme på en spillserver i MongoDB-samlingene til spillet ditt.
Test
Lagringer hører til et opplastet spill. Last opp en privat versjon minst én gang, og test deretter fra url i kvitteringen eller fra den lokale Dev-rammen som er beskrevet i publisering fra KI-appen din.