In dieser Anleitung erfahren Sie, wie Sie die Spielfortschrittsdaten eines Spielers den Dienst „Saved Games“ in einer C++ App auf. Sie können diese Dienst, mit dem der Spielfortschritt jederzeit automatisch geladen und gespeichert wird während des Spiels. Dieser Dienst kann Spielern auch das Auslösen eines Nutzers ermöglichen um vorhandene gespeicherte Spielstände zu aktualisieren oder wiederherzustellen oder einen neuen zu erstellen.
Hinweis
Falls Sie dies noch nicht getan haben, kann es hilfreich sein, sich die Konzepte für „Gespeicherte Spiele“
Bevor Sie mit dem Programmieren mit der Saved Games API beginnen:
- Installiere das C++ Play Spiele SDK.
- Richten Sie Ihre C++-Entwicklungsumgebung ein.
- Laden Sie das Codebeispiel für C++ herunter und sehen Sie sich es an.
- Aktivieren Sie den Dienst „Gespeicherte Spiele“ in der Google Play Console.
Datenformate und plattformübergreifende Kompatibilität
Daten zu gespeicherten Spielen, die Sie auf den Google-Servern speichern, müssen sich in folgendem Land befinden:
std::vector<uint8_t>
-Format. Der Dienst „Saved Games“ übernimmt die Codierung.
Ihre Daten für plattformübergreifende Kompatibilität Android-Apps können Daten
dieselben Daten wie ein Byte-Array
ohne plattformübergreifende Kompatibilitätsprobleme.
Vermeiden Sie die Verwendung plattformspezifischer Formate bei der Auswahl eines Datenformats für Ihr Daten gespeichert. Wir empfehlen Ihnen dringend, ein Datenformat wie XML oder JSON, die zahlreiche Bibliotheken auf mehreren Plattformen unterstützen.
Dienst "Gespeicherte Spiele" aktivieren
Bevor du den Dienst "Gespeicherte Spiele" verwenden kannst, musst du den Zugriff auf
. Rufen Sie dazu EnableSnapshots()
auf, wenn Sie den Dienst mit
gpg::GameServices::Builder
. Dadurch werden die zusätzlichen Authentifizierungsbereiche aktiviert.
für gespeicherte Spiele beim nächsten Authentifizierungsereignis erforderlich.
Gespeicherte Spiele anzeigen
In Ihrem Spiel können Sie eine Option anbieten, über die Spieler das Speichern oder kannst du gespeicherte Spiele wiederherstellen. Wenn Spieler diese Option auswählen, sollte Bildschirm, auf dem vorhandene Spielstände angezeigt werden, und es Spielern ermöglicht, entweder in einer dieser Slots speichern oder laden oder ein neues gespeichertes Spiel erstellen. Verwenden Sie die Methode die folgende Methode verwenden:
SnapshotManager::ShowSelectUIOperation(...)
Über die Benutzeroberfläche zur Auswahl gespeicherter Spiele können Spieler ein neues gespeichertes Spiel erstellen, Details zu vorhandenen gespeicherten Spielen abrufen und lade frühere gespeicherte Spiele.
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);
}
Das folgende Beispiel zeigt, wie die Standardbenutzeroberfläche für gespeicherte Spiele aufgerufen wird. und die Auswahl der Benutzeroberfläche des Players anpassen:
service_->Snapshots().ShowSelectUIOperation(
ALLOW_CREATE_SNAPSHOT,
ALLOW_DELETE_SNAPSHOT,
MAX_SNAPSHOTS,
SNAPSHOT_UI_TITLE,
[this](gpg::SnapshotManager::SnapshotSelectUIResponse const & response) {
…
}
Wenn im obigen Beispiel ALLOW_CREATE_SNAPSHOT
gleich true
und MAX_SNAPSHOTS
ist
ist größer als die aktuelle Anzahl der Snapshots des Nutzers
steht in der standardmäßigen Snapshot-Benutzeroberfläche eine Schaltfläche zum Erstellen eines neuen
statt ein vorhandenes Spiel zu speichern. (Wenn die Schaltfläche
befindet sich unten auf der Benutzeroberfläche.) Wenn ein Spieler auf diese Schaltfläche klickt,
Die Antwort SnapshotSelectUIResponse
ist gültig, enthält aber keine Daten.
Gespeicherte Spiele öffnen und lesen
Wenn du auf ein gespeichertes Spiel zugreifen und dessen Inhalte lesen oder ändern möchtest, öffne zuerst
Das SnapshotMetadata
-Objekt, das das gespeicherte Spiel darstellt. Rufen Sie als Nächstes die Methode
SnapshotManager::Read*()
-Methode.
Das folgende Beispiel zeigt, wie ein gespeichertes Spiel geöffnet wird:
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);
…
}
Datenkonflikte erkennen und beheben
Wenn Sie ein SnapshotMetadata
-Objekt öffnen, erkennt der Dienst „Gespeicherte Spiele“
ob ein in Konflikt stehendes gespeichertes Spiel vorhanden ist. Datenkonflikte können auftreten, wenn die gespeicherten
Das auf dem lokalen Gerät eines Spielers gespeicherte Spiel ist nicht mit der Remote-Version synchron.
die auf den Servern von Google gespeichert sind.
Die Konfliktrichtlinie, die du beim Öffnen eines gespeicherten Spiels angibst, Games-Dienst, der zeigt, wie ein Datenkonflikt automatisch gelöst wird. Folgende Richtlinien sind möglich:
Konfliktrichtlinie | Beschreibung |
---|---|
SnapshotConflictPolicy::MANUAL |
Gibt an, dass der Dienst "Gespeicherte Spiele" keine zur Problembehebung. Stattdessen findet Ihr Spiel eine benutzerdefinierte Zusammenführung |
SnapshotConflictPolicy::LONGEST_PLAYTIME |
Gibt an, dass der Dienst „Gespeicherte Spiele“ die mit der höchsten Spielzeit. |
SnapshotConflictPolicy::BASE_WINS |
Gibt an, dass der Dienst „Gespeicherte Spiele“ die Basis verwenden soll gespeichertes Spiel. |
SnapshotConflictPolicy::REMOTE_WINS |
Gibt an, dass der Dienst „Gespeicherte Spiele“ die Fernbedienung auswählen soll gespeichertes Spiel. Die Remote-Version ist eine Version der gespeicherten Spiel, das auf einem der Geräte des Spielers erkannt wird und eine neuere als die Basisversion. |
Wenn Sie eine andere Konfliktrichtlinie als GPGSnapshotConflictPolicyManual
angegeben haben,
Der Dienst „Gespeicherte Spiele“ führt das gespeicherte Spiel zusammen und gibt die aktualisierte Version zurück
durch den sich daraus ergebenden SnapshotManager::OpenResponse
-Wert. Dein Spiel kann geöffnet werden
das gespeicherte Spiel, schreiben Sie es und rufen Sie dann SnapshotManager::Commit(...)
um das gespeicherte Spiel auf den Google-Servern zu speichern.
Benutzerdefinierte Zusammenführung durchführen
Wenn Sie SnapshotConflictPolicy::MANUAL
als Konfliktrichtlinie angegeben haben,
Dein Spiel muss alle erkannten Datenkonflikte beheben, bevor du weitere Spiele ausführen kannst
Lese- oder Schreibvorgänge im gespeicherten Spiel.
Wenn in diesem Fall ein Datenkonflikt erkannt wird, gibt der Dienst den Fehlercode
folgende Parameter bis SnapshotManager::OpenResponse
:
- Ein
conflict_id
zur eindeutigen Identifizierung dieses Konflikts. Dieser Wert wird von Ihnen verwendet. wenn die endgültige Version des gespeicherten Spiels übernommen wird. - Die in Konflikt stehende Basisversion des gespeicherten Spiels und
- Die in Konflikt stehende Remote-Version des gespeicherten Spiels.
Ihr Spiel muss entscheiden, welche Daten gespeichert werden sollen, und dann die Methode
SnapshotManager::ResolveConflictBlocking()
-Methode für einen Commit/Auflösen des endgültigen Ergebnisses
auf die Server von Google.
//Resolve conflict
gpg::SnapshotManager::OpenResponse resolveResponse =
manager.ResolveConflictBlocking(openResponse.conflict_base, metadata_change,
openResponse.conflict_id);
Gespeicherte Spiele schreiben
Um ein gespeichertes Spiel zu schreiben, öffne zuerst das SnapshotMetadata
-Objekt, das für die
das gespeicherte Spiel öffnen, erkannte Datenkonflikte lösen und dann die
SnapshotManager::Commit()
-Methode, um Ihre gespeicherten
bahnbrechende Änderungen.
Das folgende Beispiel zeigt, wie Sie eine Änderung erstellen und einen Commit für eine gespeichertes Spiel.
Öffnen Sie zuerst den Snapshot, den Sie bearbeiten möchten, und stellen Sie sicher, dass alle Konflikte durch Auswahl der Basis gelöst werden kann.
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 } });
Erstellen Sie als Nächstes eine Spieländerung, die die für die Titelbild:
gpg::SnapshotMetadataChange::Builder builder; gpg::SnapshotMetadataChange metadata_change = builder.SetDescription("CollectAllTheStar savedata") .SetCoverImageFromPngData(pngData).Create();
Führen Sie abschließend einen Commit der gespeicherten Spieländerungen durch.
gpg::SnapshotManager::CommitResponse commitResponse = service_->Snapshots().CommitBlocking(metadata, metadata_change, SetupSnapshotData());
Der Parameter data enthält alle gespeicherten Spieldaten. Die Änderung enthält auch zusätzliche Metadaten zum gespeicherten Spiel, z. B. die Zeit gespielt haben, sowie eine Beschreibung für das gespeicherte Spiel.
Wenn der Commit-Vorgang erfolgreich abgeschlossen wurde, können Spieler Folgendes sehen: das gespeicherte Spiel auf der Benutzeroberfläche zur Auswahl gespeicherter Spiele.