首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从排行榜数值同步我的游戏本地分数时出现问题

从排行榜数值同步我的游戏本地分数时出现问题
EN

Stack Overflow用户
提问于 2019-08-01 01:03:02
回答 1查看 75关注 0票数 1

当我试图在所有排行榜上获得一个球员的得分时,为了存储在本地,我遇到了错误。

我的Android游戏被设计为离线玩,所以我在本地存储每个游戏模式的高分和终生分数。

现在我正致力于在我的游戏中添加排行榜。在游戏过程中,我会定期将这些分数发布到排行榜上。到目前一切尚好。

当然,我需要涵盖用户卸载我的游戏或移动到新设备等情况。在这种情况下,当他们再次登录到Google时,我需要将排行榜上的分数更新回我的本地版本。

当我进行第四次调用时,似乎就是在这里得到了26504 - NETWORK_ERROR_NO_DATA

我试图等到第三次调用完成,然后触发第四次调用,但我仍然收到相同的错误。所以我甚至不能为我仍然需要检索的5-6个额外的分数添加代码。

代码语言:javascript
复制
getScoresFromLeaderboards(GAME_MODE_FIXED_QUESTIONS, SCORE_HIGH);
getScoresFromLeaderboards(GAME_MODE_FIXED_QUESTIONS, SCORE_LIFETIME);
getScoresFromLeaderboards(GAME_MODE_RAPID_FIRE, SCORE_HIGH);
getScoresFromLeaderboards(GAME_MODE_RAPID_FIRE, SCORE_LIFETIME);

然后..。

代码语言:javascript
复制
public long getScoresFromLeaderboards(final String gameMode, final String scoreType) {
final int scoreHigh = 0, scoreLifetime = 0;

String leaderboardID = getLeaderboardForGameMode(gameMode, scoreType);

mLeaderboardsClient.loadCurrentPlayerLeaderboardScore(leaderboardID, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC )
.addOnCompleteListener(new OnCompleteListener<AnnotatedData<LeaderboardScore>>() {
       @Override
       public void onComplete(@NonNull Task<AnnotatedData<LeaderboardScore>> task) {
                if (task.isSuccessful()) {
                    AnnotatedData<LeaderboardScore> lbs = task.getResult();
                    long i = lbs.get().getRawScore();
                    // Do something to store the score locally
                }
                else{
                     Log.Error("Error", "Retrieval failed");
                }
      }
EN

回答 1

Stack Overflow用户

发布于 2021-08-26 04:38:42

我建议使用"loadCurrentPlayerLeaderboardScore“的另一种方法,它有3个查询限制

请改用loadPlayerCenteredScores。将分数限制为1。结果缓冲区将只返回球员的分数。您现在的用户配额是500个请求,而不是3个。

代码语言:javascript
复制
long limitResultsTo = 1;
String PlayerID = "-1"; // set this from playersClient.getCurrentPlayer() ->task-> getPlayerId()
String leaderboardID = getString(R.string.leaderboard_name); // or string of ID
Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .loadPlayerCenteredScores(leaderboardName, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, limitResultsTo)
    .addOnSuccessListener(new OnSuccessListener<AnnotatedData<LeaderboardsClient.LeaderboardScores>>() {
        @Override
        public void onSuccess(AnnotatedData<LeaderboardsClient.LeaderboardScores> leaderboardScoreAnnotatedData) { // big ups Danoli3.com for the fix for loadCurrentPlayerLeaderboardScore
            LeaderboardsClient.LeaderboardScores scoresResult =  leaderboardScoreAnnotatedData.get();
            LeaderboardScore scoreResult = (scoresResult != null ? scoresResult.getScores().get(0) : null);
            long score = 0;
            if(scoreResult != null && scoreResult.getScoreHolder() != null &&
                PlayerID.equals(scoreResult.getScoreHolder().getPlayerId())) // else if the player has 0 score it will retrieve top player
            score = scoreResult.getRawScore();
      
            // use the score in your own code here
            // Log.i(TAG, "loadPlayerCenteredScores:" + leaderboardID + " score:" + score);

            leaderboardScoreAnnotatedData = null; 
        }
    }).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        Log.e(TAG, "Failure:loadPlayerCenteredScores  GPG:Leader:" + leaderboardID + " Ex:" + e.getMessage());
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57295820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档