2

我想要一个本地玩家的所有朋友的列表,他们也玩我的游戏。

我想过在每个排行榜上查询每个朋友的分数,并找到不同的玩家:

GKLeaderboard *allScoresEver = [[GKLeaderboard alloc] init];
allScoresEver.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
allScoresEver.range = NSMakeRange(1,100);
allScoresEver.category = nil;

[allScoresEver loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {

        // filter out distinct players, favouring scores from our leaderboard
        ...
    }];

...但这似乎只返回本地玩家的最后报告分数,而不是每个排行榜的每个分数,由朋友过滤。文档说将类别设置为 nil 应该返回“游戏之前报告的所有分数”。我想这意味着游戏的运行实例,而不是全球应用程序意义上的游戏?

关于获得我想要的结果的有效方法的任何想法?

4

1 回答 1

0

尝试类似的代码,当类别设置为 时,我得到的不仅仅是本地玩家的结果nil,但我似乎只得到默认排行榜的结果。我认为这是有道理的,因为要求所有排行榜的所有结果最终可能会得到大量数据,但这不是文档会让你相信的。就个人而言,为了解决类似的问题,我只是询问一个排行榜,每个至少玩过一次的玩家都应该有一个条目,而不是每个排行榜。似乎奇怪的是,没有更好的方法来获取此信息,因为 Game Center 本身知道谁下载了该应用程序。

编辑:这似乎range = NSMakeRange(1, 100);是一个硬限制,考虑到你最多可以有 500 个朋友,这意味着这仍然不是一个有用的测试来让所有也玩游戏的朋友。但是,您可以使用 playerID 列表创建排行榜,因此:

GKLeaderboard *query = [[GKLeaderboard alloc] initWithPlayerIDs:[GKLocalPlayer localPlayer].friends];

将是处理它的一种方法。我已经用 500 个玩家 ID 加上最后我的朋友列表的虚拟数组对此进行了测试,它确实有效,但如果可以用 500 个实际朋友进行测试,我会感觉更好 - 我只是没有时间制作商场!

于 2013-04-18T11:38:49.257 回答