ลีดเดอร์บอร์ด

คู่มือนี้จะแสดงวิธีใช้ลีดเดอร์บอร์ดใน SDK บริการเกมของ Play c++ API เพื่อสร้างลีดเดอร์บอร์ดแบบภาพ บันทึกคะแนนของผู้เล่น และเปรียบเทียบ คะแนนกับคะแนนของผู้เล่นจากเซสชันเกมก่อนหน้า คุณจะพบ API ได้ใน LeaderboardsClient

ก่อนเริ่มต้น

หากยังไม่ได้ดำเนินการ คุณอาจดูแนวคิดเกมลีดเดอร์บอร์ดเพื่อเป็นข้อมูลเพิ่มเติมได้

ก่อนเริ่มเขียนโค้ดโดยใช้ API ของลีดเดอร์บอร์ด ให้ทำดังนี้

รับไคลเอ็นต์ลีดเดอร์บอร์ด

หากต้องการเริ่มใช้ลีดเดอร์บอร์ด API เกมของคุณต้องได้รับออบเจ็กต์ LeaderboardsClient ก่อน คุณทำได้โดยการเรียกใช้เมธอด PgsLeaderboardsClient_create() และส่งกิจกรรม

อัปเดตคะแนนของผู้เล่น

เมื่อคะแนนของผู้เล่นเปลี่ยนแปลง (เช่น เมื่อผู้เล่นเล่นเกมจบ) เกมจะอัปเดตคะแนนของผู้เล่นในลีดเดอร์บอร์ดได้โดยการเรียกใช้ PgsLeaderboardsClient_submitScoreImmediate คุณต้องส่งรหัสลีดเดอร์บอร์ด ค่าคะแนนดิบ แท็กคะแนน (ไม่บังคับ) และฟังก์ชัน Callback

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

แนวทางปฏิบัติแนะนำคือการจัดการรหัสลีดเดอร์บอร์ดเป็นค่าคงที่หรือทรัพยากร ภายในโค้ด C++

แสดงลีดเดอร์บอร์ด

หากต้องการแสดงอินเทอร์เฟซผู้ใช้ของลีดเดอร์บอร์ดเริ่มต้นสำหรับลีดเดอร์บอร์ดที่เฉพาะเจาะจง ให้เรียกใช้ PgsLeaderboardsClient_showLeaderboardUI ฟังก์ชันนี้ต้องใช้แฮนเดิลไคลเอ็นต์ กิจกรรม รหัสลีดเดอร์บอร์ด ช่วงเวลาและคอลเล็กชัน และฟังก์ชันเรียกกลับ

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

ฟังก์ชันนี้จะแสดง UI ออบเจ็กต์ activity จะให้บริบทสำหรับการแสดง UI