ลีดเดอร์บอร์ดในเกม Android

คู่มือนี้จะแสดงวิธีใช้ลีดเดอร์บอร์ด API ในแอปพลิเคชัน Android เพื่อสร้างลีดเดอร์บอร์ดแบบภาพ บันทึกคะแนนของผู้เล่น และเปรียบเทียบคะแนนกับคะแนนของผู้เล่นจากเซสชันเกมก่อนหน้า โดยคุณจะดู API ได้ในแพ็กเกจ com.google.android.gms.games และ com.google.android.gms.games.leaderboards

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

หากยังไม่ได้อ่าน โปรดดูแนวคิดเกมสำหรับตารางอันดับ

ก่อนเริ่มเขียนโค้ดโดยใช้ Leaderboards API

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

เกมของคุณต้องได้รับออบเจ็กต์ LeaderboardsClient ก่อนจึงจะเริ่มใช้ API ลีดเดอร์บอร์ดได้ ซึ่งทำได้โดยการเรียกใช้เมธอด Games.getLeadeboardsClient() และส่งกิจกรรมและ GoogleSignInAccount ของเพลเยอร์ปัจจุบัน ดูวิธีเรียกข้อมูลบัญชีผู้เล่นได้ที่การลงชื่อเข้าใช้ใน Android Games

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

เมื่อคะแนนของผู้เล่นเปลี่ยนแปลง (เช่น เมื่อผู้เล่นเล่นเกมจบ) เกมจะอัปเดตคะแนนบนลีดเดอร์บอร์ดโดยเรียกใช้ LeaderboardsClient.submitScore() และส่งรหัสลีดเดอร์บอร์ดและค่าคะแนนดิบ

ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่แอปอัปเดตคะแนนของผู้เล่นได้

Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .submitScore(getString(R.string.leaderboard_id), 1337);

แนวทางปฏิบัติแนะนำคือให้กำหนดรหัสลีดเดอร์บอร์ดในไฟล์ strings.xml เพื่อให้เกมอ้างอิงลีดเดอร์บอร์ดตามรหัสทรัพยากรได้ เมื่อเรียกใช้เพื่ออัปเดตและโหลดคะแนนของผู้เล่น โปรดทำตามแนวทางปฏิบัติแนะนำเหล่านี้ด้วยเพื่อไม่ให้เกินโควต้า API

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

หากต้องการแสดงลีดเดอร์บอร์ด ให้เรียกใช้ LeaderboardsClient.getLeaderboardIntent() เพื่อรับ Intent เพื่อสร้างอินเทอร์เฟซผู้ใช้ลีดเดอร์บอร์ดเริ่มต้น จากนั้นเกมจะแสดง UI ได้โดยเรียกใช้ startActivityForResult

ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่แอปอัปเดตคะแนนของผู้เล่นเกม ในข้อมูลโค้ด RC_LEADERBOARD_UI คือจำนวนเต็มที่กำหนดเองสำหรับรหัสคำขอ

private static final int RC_LEADERBOARD_UI = 9004;

private void showLeaderboard() {
  Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .getLeaderboardIntent(getString(R.string.leaderboard_id))
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_LEADERBOARD_UI);
        }
      });
}

โปรดทราบว่าแม้ว่าจะไม่มีการแสดงผลลัพธ์ แต่เราต้องใช้ startActivityForResult เพื่อให้ API รับข้อมูลระบุตัวตนของแพ็กเกจการโทรได้ ตัวอย่าง UI ของตารางอันดับเริ่มต้นแสดงอยู่ด้านล่าง