¿Cómo incrementar la puntuación de los jugadores en tablas de clasificación en Google Play Service de Android?

Leí toda la documentación sobre las tablas de clasificación de Google Play Services y parece que cuando llamo a la función submitScore de GameClient, el servicio tiene en cuenta la puntuación más alta enviada. P.ej:

1ª llamada:

gamesclient.submitScore( 100 ); 

Ahora la puntuación del jugador es 100

2ª llamada:

 gamesclient.submitScore( 150 ); 

Ahora la puntuación del jugador es de 150

3ª llamada:

 gamesclient.submitScore( 100 ); 

Jugador sigue siendo 150. El valor enviado no es mayor que el último por lo que se ignora.

¿Hay una manera simple de recuperar la puntuación del último jugador, sumar la nueva puntuación y enviar el total para crear una tabla de puntuación incremental? Algo como

 int old_score = ...GET LAST PLAYER SCORE... int new_score = old_score + current_game_score; gamesclient.submitScore( new_score ); 

No probarlo hasta ahora, pero creo que es el camino a seguir:

  PendingResult<Leaderboards.LoadPlayerScoreResult> result = Games.Leaderboards.loadCurrentPlayerLeaderboardScore(gameHelper.getApiClient(),"LEADERBOARD_ID",LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC); result.setResultCallback(new ResultCallback<Leaderboards.LoadPlayerScoreResult>() { @Override public void onResult(Leaderboards.LoadPlayerScoreResult loadPlayerScoreResult) { Games.Leaderboards.submitScore(gameHelper.getApiClient(), "LEADERBOARD_ID",loadPlayerScoreResult.getScore().getRawScore()+ score); } 

No parece que hay una forma in-construido de hacer esto por desgracia. Sin embargo, puedes usar Cloud Save para guardar la partitura más reciente del jugador y usarla.

Alternativamente, (esto puede parecer un poco pegajoso) cada vez que envíe una puntuación, guarde esa puntuación en SharedPreferences y, a continuación, cuando envíe otra puntuación, utilice esa preferencia para incrementar la puntuación en lugar de establecer una nueva.

Espero que esto sea de ayuda, si esto no es realmente cómo te gustaría ir sobre la solución de su problema, hágamelo saber y voy a tratar de encontrar otra solución …

Esto es lo que me ocurrió …

 @Override public void postNewScore(final int finalScore, final ArrayList<String> theseBoards) { //posts score update to any theseBoards... most likely 2 boards for (final String anID : theseBoards) { aHelper.getGamesClient().loadPlayerCenteredScores(new OnLeaderboardScoresLoadedListener() { @Override public void onLeaderboardScoresLoaded(int statusCode, Leaderboard leaderboard, LeaderboardScoreBuffer scores) { if(statusCode == GamesClient.STATUS_OK){ if(scores.getCount() == 0){ aHelper.getGamesClient().submitScore(anID, finalScore); dLog("submitted a score because there were no scores period"); } else { for (LeaderboardScore s : scores) { if(s.getScoreHolder().getPlayerId().contains(aHelper.getGamesClient().getCurrentPlayer().getPlayerId()) || aHelper.getGamesClient().getCurrentPlayer().getPlayerId().contains(s.getScoreHolder().getPlayerId())){ aHelper.getGamesClient().submitScore(anID, finalScore + s.getRawScore()); dLog("just submitted " + (finalScore + s.getRawScore())); scores.close(); return; } } //if to here, then no score on the current page, which means the player does not have a score aHelper.getGamesClient().submitScore(anID, finalScore); dLog("because no entry, just submitted " + (finalScore)); } } scores.close(); } }, anID, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_SOCIAL, 1); } } 

Si bien se le han dado ejemplos de cómo incrementar las puntuaciones, no puede utilizar las tablas de clasificación como tablas de clasificación donde las puntuaciones disminuyen.

Google en la actualidad sólo permite que la instalación para ocultar las puntuaciones de los tramposos sospechosos. Si hubiera alguna forma de bajar las puntuaciones o borrarlas por completo sería capaz de hacer lo que está pidiendo.

Creo que el razonamiento detrás de esto es que si te dejan modificar las puntuaciones ya publicadas disminuiría la confianza del usuario tanto en la plataforma de servicios de juegos de Google Play como en tu juego, para distorsionar de lo que a los jugadores les gusta apropiarse (disculpe la jerga). .

Esto conduce a la puntuación de la inflación en el tiempo, creo que utilizan enteros de 64 bits internamente:

  /** * Submit a score to the leaderboard for the currently signed-in player. * The score is ignored if it is worse (as defined by the leaderboard * configuration) than a previously submitted score for the same player. */ void SubmitScore(std::string const &leaderboard_id, uint64_t score); 

Sin embargo, podría modificar la posición de punto fijo del lugar fijo de la tabla de posiciones como un ajuste de curso para esta inflación. Yo no lo haría.

Lo sentimos si esto está fuera de tema, vamos a esperar Google tener esto en cuenta en futuras actualizaciones.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.