Cloud-Spielstände für PlayDrop-Spiele
Spielerfortschritt mit sdk.me.appData und sdk.me.updateAppData speichern und laden, für Gäste und Angemeldete; Regeln für Schreiben, Vorschau und Offline.
Cloud-Spielstände bewahren den Fortschritt jedes Spielers in deinem Spiel auf PlayDrop auf, sodass er ihn von der Website bis in die Apps begleitet. Gespeichert wird ein JSON-Objekt pro Spieler und Spiel; ein Server oder Multiplayer-Raum ist nicht nötig.
Lesen und schreiben
Nach init() ist sdk.me.appData der gespeicherte Snapshot: { data, seq, ts_event, ts_arrival }, oder null vor dem ersten Speichern. Lies dein Objekt aus data. Schreibe das ganze Objekt mit updateAppData; die Methode gibt den gespeicherten Snapshot zurück und aktualisiert 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
}- Jeder Schreibvorgang ersetzt das gesamte gespeicherte Objekt: Behalte jedes Feld, das du noch brauchst.
- Führe Schreibvorgänge wie oben nacheinander aus, damit ein älterer Spielstand nie nach einem neueren ankommt, und halte die Warteschlange nach einem Fehler am Laufen.
- Zeige „Gespeichert“ erst an, wenn das Promise erfüllt ist. Eine Änderung an
appData.dataim Arbeitsspeicher speichert nichts. appDatahat keine Methodenget,setodersave.
Wann speichern
Speichere an Checkpoints, am Levelende und bei Käufen statt in jedem Frame. Speichere nie während Vorschauen oder Aufnahmen: Schreibe nur, wenn sdk.host.phase gleich play ist. Halte einen Spielstand klein und versioniere ihn mit einem eigenen Feld wie saveVersion: 2, damit eine spätere Spielversion ihn migrieren kann.
Gäste und angemeldete Spieler
Du musst sdk.me.isLoggedIn vor dem Speichern nicht prüfen: Auch PlayDrop-Gäste behalten ihre Spielstände. Ein Spieler ganz ohne Sitzung behält den Spielstand für diesen Besuch im Arbeitsspeicher; ein erfolgreicher Schreibvorgang beweist also nicht, dass der Spielstand in der Cloud angekommen ist. Verwende isLoggedIn nur für Funktionen, die ein echtes Konto brauchen, etwa Käufe und gehosteten Multiplayer.
Offline
Im Browser brauchen Spielstände eine Verbindung, und es gibt keine Offline-Warteschlange: Lass das Spiel bei einem Fehler weiterlaufen und versuche es am nächsten Checkpoint erneut. Hosts, die Unterstützung für Gerätedaten angeben, etwa offlinefähige PlayDrop-Apps, behalten Spielstände auf dem Gerät und synchronisieren sie, sobald sie online sind.
Was Spielstände nicht sind
Spielstände sind privat für einen Spieler und ein Spiel. Sie sind getrennt von Bestenlisten und Erfolgen, die eigene APIs haben und auf PlayDrop erscheinen. Zustand, den Spieler miteinander teilen, etwa ein Match oder eine Welt, gehört auf einen Spielserver in die MongoDB-Collections deines Spiels.
Testen
Spielstände gehören zu einem hochgeladenen Spiel. Lade mindestens einmal eine private Version hoch und teste dann über die url aus dem Beleg oder im lokalen Dev-Rahmen, der unter Aus deiner KI-App veröffentlichen beschrieben ist.