Leaderboard (Bestenliste)

In dieser Anleitung erfahren Sie, wie Sie mit den Bestenlisten-APIs des Play Games Services C++ SDK visuelle Bestenlisten erstellen, die Punktzahl eines Spielers aufzeichnen und sie mit der Punktzahl des Spielers aus früheren Spielsitzungen vergleichen. Die APIs können in LeaderboardsClientgefunden werden.

Hinweis

Wir empfehlen Ihnen, sich mit den Konzepten für Bestenlisten vertraut zu machen, sofern Sie dies nicht schon getan haben.

Bevor Sie damit beginnen, die Bestenlisten-APIs fürs Coden einzusetzen, sollten Sie Folgendes tun:

Bestenlisten-Client abrufen

Bevor Sie die Bestenlisten-API verwenden können, muss Ihr Spiel zuerst ein LeaderboardsClient-Objekt abrufen. Rufen Sie dazu die PgsLeaderboardsClient_create() Methode auf und übergeben Sie die Aktivität.

Punktzahl des Spielers aktualisieren

Wenn sich die Punktzahl des Spielers ändert (z. B. wenn der Spieler das Spiel beendet), kann das Spiel die Punktzahl in der Bestenliste aktualisieren, indem es PgsLeaderboardsClient_submitScoreImmediate aufruft. Sie müssen die Bestenlisten-ID, den neuen Punktestand, ein optionales Punktzahl-Tag und eine Callback-Funktion übergeben.

// Callback function to handle the result of submitting the score
void OnScoreSubmitted(PgsStatusCode status_code,
                      PgsScoreSubmissionData* score_submission_data,
                      void* user_data) {
  if (status_code == PGS_STATUS_SUCCESS) {
    // Score submitted successfully
    // You can inspect score_submission_data for details
    // Remember to release the data when done:
    PgsScoreSubmissionData_Release(score_submission_data);
  } else {
    // Handle error
  }
}

// Function to submit the score
void SubmitScore(PgsLeaderboardsClient* client, const char* leaderboard_id, int64_t score) {
  const char* score_tag = NULL; // Optional tag

  PgsLeaderboardsClient_submitScoreImmediate(
      client,
      leaderboard_id,
      score,
      score_tag,
      OnScoreSubmitted,
      NULL // user_data - optional context pointer
  );
}

// Example usage:
// Assuming 'my_leaderboard_id' is defined elsewhere, e.g., fetched from resources
// SubmitScore(leaderboards_client, my_leaderboard_id, 1337);

Es empfiehlt sich, die Bestenlisten-IDs als Konstanten oder Ressourcen in Ihrem C++-Code zu verwalten.

Bestenliste anzeigen

Rufen Sie PgsLeaderboardsClient_showLeaderboardUI auf, um die Standardbenutzeroberfläche für die Bestenliste für eine bestimmte Bestenliste anzuzeigen. Für diese Funktion sind das Client-Handle, die Aktivität, die Bestenlisten-ID, der Zeitraum und die Sammlung sowie ein Callback erforderlich.

// Callback function to handle the result of showing the UI
void OnShowLeaderboardUI(PgsStatusCode status_code, bool success, void* user_data) {
  if (status_code == PGS_STATUS_SUCCESS && success) {
    // UI was shown successfully
  } else {
    // Handle error or failure to show UI
  }
}

// Function to show a specific leaderboard UI
void ShowLeaderboard(PgsLeaderboardsClient* client, jobject activity, const char* leaderboard_id) {
  PgsLeaderboardsClient_showLeaderboardUI(
      client,
      activity,
      leaderboard_id,
      PGS_LEADERBOARD_TIME_SPAN_ALL_TIME, // Or PGS_LEADERBOARD_TIME_SPAN_DAILY, PGS_LEADERBOARD_TIME_SPAN_WEEKLY
      PGS_LEADERBOARD_COLLECTION_PUBLIC,  // Or PGS_LEADERBOARD_COLLECTION_FRIENDS
      OnShowLeaderboardUI,
      NULL // user_data - optional context pointer
  );
}

// Example usage:
// ShowLeaderboard(leaderboards_client, android_activity, my_leaderboard_id);

Diese Funktion zeigt die Benutzeroberfläche an. Das activity-Objekt stellt den Kontext für die Anzeige der Benutzeroberfläche bereit.