Cocos2d cocos builder(spritebuilder)与游戏中心

时间:2014-08-05 18:46:50

标签: objective-c cocos2d-iphone game-center spritebuilder

我想向游戏中心展示UIView。

-(void)authenticateLocalPlayer {
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
        if (error)

        else

    }];
}
- (void)didLoadFromCCB {

    [self authenticateLocalPlayer];

    _viewController = [[UIViewController alloc] init];

    GKLeaderboardViewController* leaderboardController = [[GKLeaderboardViewController alloc] init];
    if (leaderboardController != nil){

        leaderboardController.leaderboardDelegate = self;
        leaderboardController.timeScope = GKLeaderboardTimeScopeAllTime; 
        leaderboardController.category = @"mygamehighscore";
        [_viewController presentViewController: leaderboardController animated: YES completion:nil];
    }
    [[[CCDirector sharedDirector] view] addSubview:_viewController.view];

}

但它显示此错误,并且没有弹出游戏中心。

Warning: Attempt to present <GKLeaderboardViewController: 0x15db51f0> on <UIViewController: 0x15db4d10> whose view is not in the window hierarchy!

2 个答案:

答案 0 :(得分:1)

我认为这是因为你在错误的视图控制器上调用方法presentViewController(调用方法时不在层次结构中)。

无需创建新的UIViewController,您可以使用Cocos2D提供的那个(我的代码指的是Cocos2D-iPhone 2.0)。

尝试:

AppController * appController = (AppController*) [[UIApplication sharedApplication] delegate];
[appController.navController presentViewController: leaderboardController animated:YES completion:nil];

答案 1 :(得分:1)

看起来应该是这样的:

[[CCDirector sharedDirector] presentViewController: leaderboardController animated: YES completion:nil];

完整的代码:

GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
if (leaderboardController != NULL)
{
    leaderboardController.category = kLeaderboardID;
    leaderboardController.timeScope = GKLeaderboardTimeScopeWeek;
    leaderboardController.leaderboardDelegate = self;
    [[CCDirector sharedDirector] presentViewController:leaderboardController animated:YES completion:nil];
}