Zapisy w chmurze w grach PlayDrop
Zapisuj i wczytuj postępy graczy przez sdk.me.appData i sdk.me.updateAppData, dla gości i zalogowanych, z zasadami zapisu, podglądów i gry offline.
Zapisy w chmurze przechowują postępy każdego gracza w twojej grze w PlayDrop, więc idą za nim ze strony internetowej do aplikacji. Przechowywany jest jeden obiekt JSON na gracza i grę; nie jest potrzebny żaden serwer ani pokój wieloosobowy.
Odczyt i zapis
Po init() sdk.me.appData to zapisana migawka: { data, seq, ts_event, ts_arrival } albo null przed pierwszym zapisem. Odczytaj swój obiekt z data. Zapisuj cały obiekt przez updateAppData, które zwraca zapisaną migawkę i aktualizuje 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
}- Każdy zapis zastępuje cały zapisany obiekt: zachowaj każde pole, którego nadal potrzebujesz.
- Wykonuj zapisy kolejno, jak powyżej, aby starszy zapis nigdy nie dotarł po nowszym, i nie zatrzymuj kolejki po błędzie.
- Pokazuj „Zapisano” dopiero wtedy, gdy obietnica się spełni. Zmiana
appData.dataw pamięci niczego nie zapisuje. appDatanie ma metodget,setanisave.
Kiedy zapisywać
Zapisuj w punktach kontrolnych, na końcu poziomów i przy zakupach, a nie w każdej klatce. Nigdy nie zapisuj podczas podglądów ani przechwytywania: zapisuj tylko wtedy, gdy sdk.host.phase ma wartość play. Utrzymuj zapis mały i wersjonowany własnym polem, takim jak saveVersion: 2, aby późniejsza wersja gry mogła go zmigrować.
Goście i zalogowani gracze
Nie musisz sprawdzać sdk.me.isLoggedIn przed zapisem: goście PlayDrop też zachowują swoje zapisy. Gracz bez żadnej sesji przechowuje zapis w pamięci tylko na czas tej wizyty, więc pomyślny zapis nie dowodzi, że dotarł on do chmury. Używaj isLoggedIn tylko w funkcjach wymagających prawdziwego konta, takich jak zakupy i hostowany tryb wieloosobowy.
Offline
W przeglądarce zapisy wymagają połączenia i nie ma kolejki offline: przy błędzie pozwól grać dalej i ponów zapis w następnym punkcie kontrolnym. Hosty obsługujące dane na urządzeniu, takie jak aplikacje PlayDrop działające offline, przechowują zapisy na urządzeniu i synchronizują je po połączeniu z siecią.
Czym zapisy nie są
Zapisy są prywatne dla jednego gracza i jednej gry. Są oddzielne od rankingów i osiągnięć, które mają własne API i pojawiają się w PlayDrop. Stan wspólny dla wielu graczy, taki jak mecz czy świat, należy do serwera gry, w kolekcjach MongoDB twojej gry.
Testuj
Zapisy należą do przesłanej gry. Prześlij wersję prywatną co najmniej raz, a potem testuj z url z potwierdzenia przesłania albo z lokalnej ramki Dev opisanej w publikowaniu z aplikacji AI.