2013-03-25 54 views
7

我使用Apple's code表现出GKGameCenterViewControllerGKGameCenterViewController始终显示的挑战,而不是排行榜

GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
if (gameCenterController != nil) { 
    gameCenterController.gameCenterDelegate = self; 
    [self presentViewController:gameCenterController animated:YES completion:nil]; 
} 

这是描述上面代码中的文本:

游戏中心的用户界面被显示在您的视图控制器(iOS)

Game Kit使用的惯例是为您的视图控制器之一提供游戏套件视图控制器。您的视图控制器充当其呈现的视图控制器的代理,以便当玩家完成查看所呈现的屏幕时可以通知它。清单2-1显示了这种模式的最常见用法,它显示了Game Center用户界面。游戏中心视图控制器显示许多不同的Game Center内容,所以大多数游戏应该提供一个按钮,让玩家进入该屏幕,即使游戏也使用自定义用户界面显示Game Center内容。

当我使用推荐的代码,我得到这个屏幕(GameCenter的挑战),这是不是我想要的:

GameCenter Challenges Screen

我自己也尝试这样的代码:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]]; 

通过使用该代码,我进入了我期望显示的屏幕:

enter image description here

我误解了某些东西还是我做错了什么?第一段代码不应该把我带到主菜单吗?为什么它不显示排行榜?

UPDATE

我实现viewState的建议通过phix23

GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
if (gameCenterController != nil) { 
    gameCenterController.gameCenterDelegate = self; 
    gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
    [self presentViewController:gameCenterController animated:YES completion:nil]; 
} 

但是,它仍然显示了同样的挑战屏幕,尽管我希望/尝试显示排行榜屏幕的事实。

+0

你有没有想过这个?我的'GKGameCenterViewController'似乎也忽略了'viewState'的值;总是打开到相同的游戏中心选项卡,无论我设置为什么。 – Michael 2014-04-28 03:38:50

+0

在这一个上任何运气。我总是显示领导委员会,我告诉它向我展示成就。 – Alix 2015-09-01 19:15:08

回答

1

从iOS 6开始可用的GKGameCenterViewController可显示支持游戏中心的应用程序的排行榜,成就和挑战。

您可以通过设置GKGameCenterViewControllerviewState来更改初始视图。如果您未设置此属性,它将显示默认视图,这是您的案例中的挑战视图。我想你没有设置任何排行榜或成就,所以没有什么可以显示。使用此代码

+0

phix23,请参阅上面的更新。 // PeterK – PeterK 2013-03-25 23:20:08

+0

尝试使用GKLeaderboardViewController而不是 – Felix 2013-03-26 00:49:32

0

尝试:

-(void)showGameCentersDefaultPage { 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
      gameCenterController.gameCenterDelegate = self; 
      gameCenterController.viewState = GKGameCenterViewControllerStateDefault; 
      [self presentViewController:gameCenterController animated:YES completion:nil]; 
     } 
} 

如果你想开始与特定类型的GameCenter的排行榜,你可以调用下面的方法你leaderboardID

- (void)showLeaderboard:(NSString*)leaderboardID { 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
     gameCenterController.gameCenterDelegate = self; 
     //The next three lines are the lines of interest... 
     gameCenterController.viewState = GKGameCenterViewControllerStateDefault; 
     gameCenterController.leaderboardTimeScope = GKLeaderboardTimeScopeToday; 
     gameCenterController.leaderboardCategory = leaderboardID; 
     [self presentViewController:gameCenterController animated:YES completion:nil]; 
    } 
} 
+0

尝试了所有操作,但仍然处于挑战屏幕。我想这是我必须接受的一个我不明白为什么,因为我确实有作品(旧)的代码。 – PeterK 2013-03-26 19:23:20

0

使用GKGameCenterViewController和设置查看状态:

//Create a leaderboard view controller 
GKGameCenterViewController *leaderboardViewController = [[GKLeaderboardViewController alloc] init]; 
leaderboardViewController.viewState = GKGameCenterViewControllerStateLeaderboards; 

//Set the time scope (ex. All Time, This Week, Today) and the leaderboard ID 
leaderboardViewController.timeScope = GKLeaderboardTimeScopeAllTime; 
leaderboardViewController.leaderboardCategory = leaderboardID; 

//Set the delegate so we can handle various actions including dismissal 
leaderboardViewController.leaderboardDelegate = self; 

//Present the view controller 
[self presentViewController:leaderboardViewController animated:YES completion:nil]; 

这段代码将显示一个视图控制器,显示您的所有游戏排行榜(或排名,如果只有一个)。您还可以设置属性,例如显示哪个排行榜,时间范围,委托等。另请注意,您可以使用GKAchievementViewController做出类似的成就。

,你在你的问题中提供的代码,

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]]; 

启动GameCenter的应用程序。这意味着iOS将退出您的应用程序并切换到GameCenter。这可能会让用户感到困惑。您还应该避免让用户离开您的应用程序。相反,使用在您的应用程序中以模态方式呈现的GKViewControllers

+0

'GKLeaderboardViewController'自iOS 7.0以来已经折旧。 – Zorayr 2014-03-26 00:29:16

+0

@Zorayr这就是你为什么downvoted?这显然是一个过时的答案,所以这不是一个有效的downvote原因 - 至少给我一个机会来编辑它! – 2014-03-27 17:25:50

+0

如果它已过时,请删除答案。人们浪费时间尝试折旧方法。 – Zorayr 2014-03-27 18:22:53

0

对于iOS 7.0,我使用以下命令:

显示排行榜:

- (void)displayLeaderboard:(UIViewController *)viewController 
{ 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
     gameCenterController.gameCenterDelegate = self; 
     gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
     [viewController presentViewController:gameCenterController animated:YES completion:nil]; 
    } 
} 

显示成就:

- (void)displayAchievements:(UIViewController *)viewController 
{ 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) { 
     gameCenterController.gameCenterDelegate = self; 
     gameCenterController.viewState = GKGameCenterViewControllerStateAchievements; 
     [viewController presentViewController:gameCenterController animated:YES completion:nil]; 
    } 
} 

注意视图控制器试图利用这些功能将需要通过自己(即viewContr oller param必须设置为某个活动视图控制器)。

希望这会有所帮助。