Las 5 mejores puntuaciones de google leaderboard
Mi requisito es obtener las mejores 5 puntuaciones de leaderboard y mostrarlo en mi aplicación.
Hay un método loadTopScores pero muestra las puntuaciones en su propia interfaz de usuario supongo.
- ¿Hay disponible una API de Google Transit?
- Código de respuesta inesperado 403 para https://www.googleapis.com/games/v1/players/1123xxxxxx11712506520 y otros errores de servicios de reproducción
- Google Sign-in siempre falla en GoogleSignInResult
- ¿Cómo utilizar correctamente Google Plus Iniciar sesión con múltiples actividades?
- Obtener el nombre de usuario de Google Plus en android
mGamesClint.loadTopScores(new OnLeaderboardScoresLoadedListener() { public void onLeaderboardScoresLoaded(int arg0, LeaderboardBuffer arg1, LeaderboardScoreBuffer arg2) { // TODO Auto-generated method stub } }, LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME , LeaderboardVariant.COLLECTION_PUBLIC, 5, true);
Entonces, ¿hay alguna manera de obtener datos individuales como nombre y puntuación ..?
Nombre 1: Nombre del máximo goleador 1 puntuación 1: puntaje del máximo goleador 1
Nombre 2: Nombre del máximo goleador 2 puntuación 2: puntaje del máximo goleador 2
……y así
Sólo quiero la cadena de nombre y la partitura entero para que pueda utilizarlo en mi juego.
Por favor, sugerirme algunas ideas
- Android: ¿Cómo obtener un token de actualización mediante Google Sign-In API?
- Error "No se puede crear una conexión fiable con el servidor" al iniciar sesión con google plus
- Cómo configurar el texto del cuadro de diálogo de google api en el idioma predeterminado de la aplicación
- ¿Cómo mantiene Google Keep Speech Recognition mientras se guarda la grabación de audio al mismo tiempo?
- Uso de un token antiguo para consultar las compras.suscripciones en la API de Google Play Developer
- AVD Manager - "No hay imágenes del sistema instaladas para esta meta." En el nivel 23 de la API
- ¿Cómo obtener GoogleApiClient en Xamarin?
- El método de conexión del cliente API de Google congela la interfaz de usuario cuando no hay conexión a Internet
Usted está en el camino correcto en su ejemplo, sólo tiene que extraer la información una vez que se carga. Es bastante confuso para conseguir que funcione, pero voy a señalar a esta respuesta de la mía, que muestra cómo hacerlo para los logros – hacerlo para las tablas de clasificación funciona de la misma manera, excepto que va a utilizar las interfaces de leaderboard en lugar de los utilizados para Logros.
Básicamente, accederá a arg2
para obtener los datos, y debería verse algo así:
mGamesClint.loadTopScores(new OnLeaderboardScoresLoadedListener() { public void onLeaderboardScoresLoaded(int arg0, LeaderboardBuffer arg1, LeaderboardScoreBuffer arg2) { // iterate through the list of returned scores for the leaderboard int size = arg2.getCount(); for ( int i = 0; i < size; i++ ) { LeaderboardScore lbs = arg2.get( i ); // access the leaderboard data int rank = i + 1; // Rank/Position (#1..#2...#n) String name = lbs.getScoreHolderDisplayName(); String scoreStr = lbs.getDisplayScore(); long score = lbs.getRawScore(); // now display or cache these values, or do whatever with them :) } arg2.close(); arg1.close(); } }, LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 5, true);
Realmente no he probado esta implementación, pero debería funcionar (o al menos mostrarte lo suficiente para poder corregir los errores que pudiera haber cometido).
Sólo recuerde que esto se hará de manera asíncrona, por lo que el contenido del método no se ejecutará de inmediato, sino más bien una vez que las puntuaciones se han cargado.
He aquí cómo lo he conseguido.
PendingResult<Leaderboards.LoadScoresResult> topScores = Games.Leaderboards.loadTopScores(getApiClient(),LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 1, true); topScores.setResultCallback(new ResultCallback<Leaderboards.LoadScoresResult>() { @Override public void onResult(LoadScoresResult scoreResults) { if(scoreResults != null) { if (scoreResults.getStatus().getStatusCode() == GamesStatusCodes.STATUS_OK) { scoreStringBuilder = new StringBuilder(); LeaderboardScoreBuffer scoreBuffer = scoreResults.getScores(); Iterator<LeaderboardScore> it = scoreBuffer.iterator(); while(it.hasNext()){ LeaderboardScore temp = it.next(); Log.d("PlayGames", "player"+temp.getScoreHolderDisplayName()+" id:"+temp.getRawScore() + " Rank: "+temp.getRank()); scoreStringBuilder.append("|"+temp.getScoreHolderDisplayName()+"*"+temp.getRawScore()); } UnityPlayer.UnitySendMessage(handlerName, "onGetScoreSucceededEventListener", ""); Log.d("PlayGames", "Call Sent for getHighScorewithPlayerNameSuccess ::: "+handlerName); } } }});
Puede usarlo como desee. Creé una cadena y la devolví a Unity y luego la analizé. Sin embargo, este código funciona con los últimos servicios de Google Play.
Gracias
Mi solución que funcionó es la siguiente que es para los últimos servicios de juego.
Games.Leaderboards.loadTopScores(mGamesClint,LEADERBOARD_ID, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 5).setResultCallback(new ResultCallback<Leaderboards.LoadScoresResult>() { public void onResult(LoadScoresResult arg0) { // TODO Auto-generated method stub int size = arg0.getScores().getCount(); for ( int i = 0; i < 3; i++ ) { LeaderboardScore lbs = arg0.getScores().get(i); String name = lbs.getScoreHolderDisplayName(); String score = lbs.getDisplayScore(); Uri urlimage = lbs.getScoreHolderHiResImageUri(); } }
Usted puede obtener todos los datos de los usuarios de tablas de clasificación aquí, incluyendo la imagen de alta resolución es decir. foto de perfil. Espero que tengas la idea aquí.
- AlphaAnimation no funciona en Sandwich de helado
- GC y onTouch causan un error de señal fatal 11 (SIGSEGV) en la aplicación que utiliza ffmpeg a través de ndk