我正在为iOS 7创建游戏,并且正在尝试实施Game Center排行榜。当我点击某个按钮时,我得到了打开排行榜的应用程序,但它显示“没有项目”。如果提交分数或检索排行榜存在问题,我现在不确定。提交分数似乎是一个问题,因为它在我的排行榜顶部显示了应用名称,但我找不到我的错误。 我提交分数的代码:
-(void)reportScore:(NSInteger ) highScore
{
if ([GKLocalPlayer localPlayer].isAuthenticated) {
GKScore *scoreReporter = [[GKScore alloc] initWithLeaderboardIdentifier:@"flapjacks1" forPlayer:[GKLocalPlayer localPlayer].playerID];
scoreReporter.value = highScore;
NSLog(@"Score reporter value: %@", scoreReporter);
[GKScore reportScores:@[scoreReporter] withCompletionHandler:^(NSError *error) {
if (error != nil) {
NSLog(@"Error");
// handle the reporting error
}
}];
}
}
这是我检索排行榜的方法:
-(void)displayLeaderboard
{
//NSString *_leaderboardIdentifier = @"flapjacks1";
[[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {
if (error != nil) {
NSLog(@"%@", [error localizedDescription]);
}
else{
//_leaderboardIdentifier = leaderboardIdentifier;
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];
if (gameCenterController != nil)
{
gameCenterController.gameCenterDelegate = self;
gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards;
//gameCenterController.leaderboardTimeScope = GKLeaderboardTimeScopeToday;
gameCenterController.leaderboardIdentifier = @"flapjacks1";
[self presentViewController: gameCenterController animated: YES completion:nil];
}
}
}];
}
所以,我不确定我是否正在不正确地访问排行榜,或者排行榜真的没有数据。我一直在搜索,找不到答案。非常感谢帮助。
答案 0 :(得分:0)
您是否已将排行榜信息添加到iTunes Connect中的应用程序并提交了您的应用程序,以便状态等待二进制上传?您可能还需要在设置应用程序状态后等待24小时,然后才能使用Sandbox版本的新排行榜。
您需要确保为要提交的应用程序版本启用游戏中心组件(排行榜和成就),该版本与您在iTunes Connect中创建排行榜的区域分开。
答案 1 :(得分:0)
您确定要在同一课程中初始化和更新分数吗? 如果您在app delegate中初始化但在其他类中上传得分则会产生问题,例如,请查看以下内容:
您在app delegate中验证了播放器:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([GameCenterManager isGameCenterAvailable])
{
isGameCenterAvailable = YES;
self.gameCenterManager = [[[GameCenterManager alloc] init] autorelease];
[self.gameCenterManager setDelegate:self];
[self.gameCenterManager authenticateLocalUser];
}
else
{
isGameCenterAvailable = NO;
// The current device does not support Game Center.
}
然后想要在其他一些类上传分数,使用app delegate的对象:
- (void) submitScore2 : (int) curScore
{
if(curScore > 0)
{
[[self delegate].gameCenterManager reportScore: curScore forCategory: self.currentLeaderBoard];
}
}