Z tego przewodnika dowiesz się, jak zapisywać i wczytywać dane o postępach gracza w grze za pomocą z usługi Zapisane gry w aplikacji C++. Możesz użyć tej usługa pozwalająca automatycznie wczytywać i zapisywać postępy w grze w dowolnym momencie podczas rozgrywki. Ta usługa może też umożliwiać odtwarzaczom aktywowanie aktywności użytkownika aby zaktualizować lub przywrócić zapisaną grę albo utworzyć nową.
Zanim zaczniesz
W razie potrzeby zapoznaj się z Zapisane gry.
Zanim zaczniesz pisać kod przy użyciu interfejsu Saved Games API:
- Zainstaluj pakiet SDK do gier w C++ Play.
- Skonfiguruj środowisko programistyczne C++.
- Pobierz i przejrzyj przykładowy kod w C++.
- Włącz usługę Zapisane gry w Konsoli Google Play.
Formaty danych i zgodność z wieloma platformami
Dane zapisanych gier, które zapisujesz na serwerach Google, muszą znajdować się w
Format: std::vector<uint8_t>
. Usługa Zapisane gry odpowiada za kodowanie
Twoje dane na potrzeby zgodności z wieloma platformami, Aplikacje na Androida mogą odczytywać
te same dane co w tablicy bajtów, bez problemów ze zgodnością z wieloma platformami.
Przy wyborze formatu danych nie używaj formatów właściwych dla danej platformy. Dane zapisanych gier. Zdecydowanie zalecamy korzystanie z formatu danych, np. Format XML lub JSON, który zapewnia solidną obsługę bibliotek na wielu platformach.
Włączanie usługi Zapisane gry
Aby korzystać z usługi Zapisane gry, musisz najpierw włączyć dostęp do
. Aby to zrobić, wywołaj EnableSnapshots()
podczas tworzenia usługi za pomocą
gpg::GameServices::Builder
Spowoduje to włączenie dodatkowych zakresów uwierzytelniania
wymagane przez zapisane gry przy następnym zdarzeniu autoryzacji.
Wyświetlanie zapisanych gier
W grze możesz udostępnić opcję, którą gracze mogą aktywować, aby zapisać lub przywrócić zapisane gry. Gdy gracz wybierze tę opcję, gra powinna pokazać Wyświetli się ekran z istniejącymi miejscami zapisywania i pozwala graczom zapisać lub wczytać grę w jednym z tych boksów lub utworzyć nową zapisaną grę. Użyj w następujący sposób:
SnapshotManager::ShowSelectUIOperation(...)
Interfejs wyboru Zapisane gry umożliwia graczy, by utworzyć nową zapisaną grę, wyświetlić szczegółowe informacje o istniejących grach, i wczytaj zapisane wcześniej gry.
SnapshotManager::SnapshotSelectUIResponse response;
if (IsSuccess(response.status)) {
if (response.data.Valid()) {
LogI("Description: %s", response.data.Description().c_str());
LogI("FileName %s", response.data.FileName().c_str());
//Opening the snapshot data
…
} else {
LogI("Creating new snapshot");
…
}
} else {
LogI("ShowSelectUIOperation returns an error %d", response.status);
}
Ten przykład pokazuje, jak otworzyć domyślny interfejs użytkownika Zapisane gry. i wybrać interfejs odtwarzacza:
service_->Snapshots().ShowSelectUIOperation(
ALLOW_CREATE_SNAPSHOT,
ALLOW_DELETE_SNAPSHOT,
MAX_SNAPSHOTS,
SNAPSHOT_UI_TITLE,
[this](gpg::SnapshotManager::SnapshotSelectUIResponse const & response) {
…
}
Jeśli w tym przykładzie ALLOW_CREATE_SNAPSHOT
to true
, a MAX_SNAPSHOTS
jest większy niż rzeczywista liczba zrzutów dysku, które użytkownik obecnie ma
w domyślnym interfejsie
Przeglądu dnia znajduje się przycisk
zapisać grę, zamiast wybierać już istniejącą. (Po wyświetleniu przycisk
znajduje się w dolnej części interfejsu). Gdy użytkownik kliknie ten przycisk,
Odpowiedź SnapshotSelectUIResponse
jest prawidłowa, ale nie zawiera danych.
Otwieranie i odczytywanie zapisanych gier
Aby uzyskać dostęp do zapisanej gry i przeczytać lub zmodyfikować jej zawartość, najpierw uruchom
obiekt SnapshotMetadata
reprezentujący zapisaną grę. Następnie wywołaj funkcję
Metoda SnapshotManager::Read*()
.
Ten przykład pokazuje, jak otworzyć zapisaną grę:
LogI("Opening file");
service_->Snapshots()
.Open(current_snapshot_.FileName(),
gpg::SnapshotConflictPolicy::BASE_WINS,
[this](gpg::SnapshotManager::OpenResponse const & response) {
LogI("Reading file");
gpg::SnapshotManager::ReadResponse responseRead =
service_->Snapshots().ReadBlocking(response.data);
…
}
Wykrywanie i rozwiązywanie konfliktów danych
Gdy otworzysz obiekt SnapshotMetadata
, usługa Zapisane gry wykryje
czy istnieje zapisana gra, która koliduje z konfliktem. Konflikty danych mogą wystąpić, gdy zapisane dane
gra przechowywana na lokalnym urządzeniu gracza nie jest zsynchronizowana z wersją zdalną
przechowywane na serwerach Google.
Zasada konfliktu określona przy otwarciu zapisanej gry informuje Usługa gier – automatyczne rozwiązywanie konfliktów danych Oto możliwe zasady:
Zasady dotyczące konfliktu | Opis |
---|---|
SnapshotConflictPolicy::MANUAL |
Wskazuje, że usługa Zapisane gry nie powinna wykonywać żadnej rozwiązania problemu. Zamiast tego gra wykona niestandardowe scalenie. |
SnapshotConflictPolicy::LONGEST_PLAYTIME |
Wskazuje, że usługa Zapisane gry powinna wybrać zapisanej gry z największą wartością czasu gry. |
SnapshotConflictPolicy::BASE_WINS |
Wskazuje, że usługa Zapisane gry powinna wybrać podstawowy element zapisanej gry. |
SnapshotConflictPolicy::REMOTE_WINS |
Wskazuje, że usługa Zapisane gry powinna wybrać pilota zapisanej gry. Wersja zdalna to wersja zapisanego gra wykryta na jednym z urządzeń gracza i ma nowsza niż w wersji podstawowej. |
Jeśli została określona zasada konfliktu inna niż GPGSnapshotConflictPolicyManual
,
usługa Zapisane gry scali zapisaną grę i zwraca zaktualizowaną wersję gry.
przez wynikową wartość SnapshotManager::OpenResponse
. Gra może się uruchomić
zapisz grę, zapisz w niej zapis i wywołaj funkcję SnapshotManager::Commit(...).
do zapisania zapisanej gry na serwerach Google.
Scalanie niestandardowe
Jeśli jako zasadę konfliktu podano SnapshotConflictPolicy::MANUAL
,
gra musi rozwiązać wszelkie wykryte konflikty danych, zanim będzie można kontynuować
operacji odczytu i zapisu w zapisanej grze.
W takim przypadku, gdy wykryje konflikt danych, usługa zwróci
te parametry za pomocą funkcji SnapshotManager::OpenResponse
:
- Identyfikator
conflict_id
jednoznacznie identyfikujący konflikt (użyjesz tej wartości) przy zatwierdzaniu ostatecznej wersji zapisanej gry); - podstawowa wersja zapisanej gry, która powoduje konflikt; oraz
- Zdalna wersja zapisanej gry, która powoduje konflikt.
Gra musi określić, jakie dane mają być zapisywane, a następnie wywołuje metodę
Metoda SnapshotManager::ResolveConflictBlocking()
do zatwierdzenia/konieczności rozwiązania końcowego
wersję na serwery Google.
//Resolve conflict
gpg::SnapshotManager::OpenResponse resolveResponse =
manager.ResolveConflictBlocking(openResponse.conflict_base, metadata_change,
openResponse.conflict_id);
Tworzenie zapisanych gier
Aby napisać zapisaną grę, najpierw otwórz obiekt SnapshotMetadata
reprezentujący
zapisanej gry, rozwiąż wszelkie wykryte konflikty danych, a następnie wywołaj
SnapshotManager::Commit()
metoda zatwierdzenia zapisanych
zmiany w grze.
Z przykładu poniżej dowiesz się, jak możesz utworzyć zmianę i zatwierdzić zapisanej gry.
Najpierw otwórz zrzut, który chcesz edytować, i sprawdź, czy nie występują konflikty można rozwiązać, wybierając podstawę.
service_->Snapshots().Open( file_name, gpg::SnapshotConflictPolicy::BASE_WINS, [this](gpg::SnapshotManager::OpenResponse const &response) { if (IsSuccess(response.status)) { // metadata : gpg::SnapshotMetadata metadata = response.data; } else { // Handle snapshot open error here } });
Następnie utwórz zapisaną zmianę gry, która obejmuje dane obrazu użyte przez grafika okładki:
gpg::SnapshotMetadataChange::Builder builder; gpg::SnapshotMetadataChange metadata_change = builder.SetDescription("CollectAllTheStar savedata") .SetCoverImageFromPngData(pngData).Create();
Na koniec zatwierdź zapisane zmiany w grze.
gpg::SnapshotManager::CommitResponse commitResponse = service_->Snapshots().CommitBlocking(metadata, metadata_change, SetupSnapshotData());
Parametr danych zawiera wszystkie dane, które przechowujesz. Zmiana obejmuje też dodatkowe zapisane metadane gry, takie jak godzina i opis zapisanej gry.
Jeśli operacja zatwierdzania zakończyła się pomyślnie, gracze mogą zobaczyć zapisane gry w interfejsie wyboru zapisanych gier.