【问题标题】:How do I pull multiple leaderboards from the Google Play Games API in Android?如何从 Android 中的 Google Play Games API 中提取多个排行榜?
【发布时间】:2014-05-13 00:40:39
【问题描述】:

我正在开发一款多层次的 Android 游戏,我想在登录后获得高分。 我正在这样做:

Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]),
                LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
                .setResultCallback(this);

但是回调没有给我排行榜ID:

@Override
public void onResult(LoadPlayerScoreResult res) {

}

我只得到分数 (res.getScore())。 那么我必须为我的 25 个关卡中的每一个都创建回调还是有更好的解决方案?

这也不行:

for (int i = 0; i < 25; i++)
    Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]),
                LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
                .setResultCallback(new ResultCallback<LoadPlayerScoreResult>() {

                    @Override
                    public void onResult(LoadPlayerScoreResult res) {
                        // can't use variable i here
                    }
    });

【问题讨论】:

  • 我认为你的方法不对。如果您已经拥有排行榜 ID,为什么还需要它。您正在将它输入到方法中,为什么需要它回来。
  • 因为我必须知道我得到了哪个结果(对于第一种方法,使用一个 onResult 侦听器)。当然,如果我复制 25 次,我知道排行榜 ID,但应该有比这更好的解决方案。
  • 那么你的目标到底是什么,你想以最有效的方式从 25 个不同的排行榜中获取玩家的分数?
  • 完全正确,无需复制相同的语句 25 次,只需更改排行榜 id 索引;)
  • 在这种情况下,只需使用您输入的 for 循环。它有什么问题?

标签: android google-play-services google-play-games


【解决方案1】:

在你的 java 文件中定义这个内部类:

public class Leaderboard implements ResultCallback<Leaderboards.LoadPlayerScoreResult> {

        private Leaderboard(String id) {
            leaderboardId = id;
        }

        private String leaderboardId = "";

        @Override
        public void onResult(LoadPlayerScoreResult arg0) {
            // TODO Auto-generated method stub
            System.out.println(leaderboardId);
        }

}

现在使用这个代码:

for (int i = 0; i < 25; i++) { 
    Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]),
    LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
    .setResultCallback(new Leaderboard(getString(LEADER_BOARDS[i])));
}

现在让我稍微解释一下这是如何工作的。 Leaderboard 类实现了 ResultCallback,因此在您获得玩家分数后,它会在 setResultCallback 方法中使用。现在,在 for 循环中,每次获取分数的调用都将类排行榜的不同对象设置为结果回调,并且每个对象都被赋予唯一的排行榜 ID,该 ID 使用构造函数保存在类中,并且正如您在课堂上看到的那样,有一个方法可以让您在 onresult 中返回 leaderboardid。

【讨论】:

  • 哈哈,我还没有测试它,但它应该可以工作;)我会告诉你的。
  • 只是好奇。我已经尝试过类似的代码,它适用于 2-3(第一个)9 的排行榜。我认为某种限制。它真的有用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2018-02-07
  • 1970-01-01
  • 2013-05-12
  • 2023-04-04
  • 2013-09-06
相关资源
最近更新 更多