Skyscraper horizontal

En esta guía, se muestra cómo usar las APIs de tablas de clasificación del SDK de C++ de los Servicios de Play Games para crear tablas de clasificación visuales, registrar la puntuación de un jugador y compararla con la correspondiente a sus sesiones anteriores. Puedes encontrar las APIs en LeaderboardsClient.

Antes de comenzar

Si aún no lo hiciste, puede resultarte útil revisar los conceptos de juegos de tablas de clasificación.

Antes de comenzar a programar mediante las API de tablas de clasificación, haz lo siguiente:

Cómo obtener el cliente de tablas de clasificación

A fin de comenzar a usar la API de tablas de clasificación, el juego primero debe obtener un LeaderboardsClient objeto. Para ello, llama al PgsLeaderboardsClient_create() método y pasa la actividad.

Cómo actualizar la puntuación del jugador

Cuando la puntuación del jugador cambia (por ejemplo, cuando se termina el juego), el juego puede actualizar la puntuación en la tabla de clasificación llamando a PgsLeaderboardsClient_submitScoreImmediate. Debes pasar el ID de la tabla de clasificación, el valor de la puntuación sin procesar, una etiqueta de puntuación opcional y una función de devolución de llamada.

// 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);

Una práctica recomendada es administrar los IDs de las tablas de clasificación como constantes o recursos dentro del código de c++.

Cómo mostrar una tabla de clasificación

Si deseas mostrar la interfaz de usuario de la tabla de clasificación predeterminada para una tabla de clasificación específica, llama a PgsLeaderboardsClient_showLeaderboardUI. Esta función requiere el controlador del cliente, la actividad, el ID de la tabla de clasificación, el período y la colección, y una devolución de llamada.

// 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);

Esta función muestra la IU. El objeto activity proporciona el contexto para mostrar la IU.