我的要求是从排行榜上获得前5名,并在我的应用程序中显示出来。
有一个方法loadTopScores,但它显示在它自己的UI中的分数,我猜。
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);我有没有办法得到个人数据,比如姓名和分数.?
名字1:最高得分者的名字1分1:最高得分手1分
名字2:得分最高的2名:得分最高的2名
......and等
我只想要名字,字符串和分数整数,以便我可以使用它在我的游戏。
请给我一些建议
发布于 2015-06-08 11:48:49
我的解决方案工作如下,这是最新的游戏服务。
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();
}
}您可以在这里从主板用户那里获得所有数据,包括高分辨率图像。侧写图片。希望你能在这里有个主意。
发布于 2014-06-05 21:46:02
在您的示例中,您正处于正确的轨道上,您只需要在加载信息之后提取它。让它正常工作是相当令人费解的,但我将向您介绍我的this answer,它展示了如何为取得成就而工作--对于领导板来说,它的工作方式是相同的,只不过您将使用领导板接口而不是那些用于取得成就的界面。
基本上,您将访问arg2来获取数据,它应该如下所示:
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);实际上,我并没有测试这个实现,但是它应该可以工作(或者至少向您展示足够多的内容,以便您可以修复我可能犯的任何错误)。
请记住,这将是异步执行的,因此方法的内容不会立即执行,而是在加载分数之后执行。
发布于 2015-06-08 12:05:33
我是如何做到这一点的。
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);
}
}
}});您可以按需要使用它--我创建了一个字符串,并将其返回给Unity,然后解析它。但是这段代码正在与最新的Google服务一起使用。
谢谢
https://stackoverflow.com/questions/24057643
复制相似问题