Dodawanie zapisanych gier do gry

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:

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.

  1. 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
            }
          });
    
  2. 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();
    
  3. 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.