IPhone, как отображать экран Leaderboard в моей собственной игре .... разработано в cocos2d - PullRequest
1 голос
/ 27 апреля 2011

Я хочу показать LeaderBord в моей собственной игре .... Я использую следующий метод для этого, но замечаю, что это произошло ... Я запутался с контроллером rootview, так как моя игра разработана в cocos2d, поэтому нет ничего похожего на dat :(

// Leaderboards

-(void) showLeaderboard
{
    if (isGameCenterAvailable == NO)
        return;

    GKLeaderboardViewController* leaderboardVC = [[[GKLeaderboardViewController alloc] init] autorelease];
    if (leaderboardVC != nil)
    {
        leaderboardVC.leaderboardDelegate = self;
        [self presentViewController:leaderboardVC];
    }
}
///
-(void) leaderboardViewControllerDidFinish:(GKLeaderboardViewController*)viewController
{
    [self dismissModalViewController];
    [delegate onLeaderboardViewDismissed];
}

///////

-(UIViewController*) getRootViewController
{
    return [UIApplication sharedApplication].keyWindow.rootViewController;
}
///
-(void) presentViewController:(UIViewController*)vc
{
    UIViewController* rootVC = [self getRootViewController];
    [rootVC presentModalViewController:vc animated:YES];
}

////
-(void) dismissModalViewController
{
    UIViewController* rootVC = [self getRootViewController];
    [rootVC dismissModalViewControllerAnimated:YES];
}

... привет

Хасееб

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Если у вас нет корневого UIViewController, то я бы порекомендовал создать новый UIViewController, задающий его представление для вашего openGLView, а затем использовать этот контроллер представления для представления таблицы лидеров в качестве контроллера модального представления.

UIViewController *leaderboardViewController = [[UIViewController alloc] init];
[leaderboardViewController setView:[[CCDirector sharedDirector] openGLView]];

[leaderboardViewController presentModalViewController:leaderboardVC animated:YES]; //leaderboardVC is your GKLeaderboardViewController
0 голосов
/ 27 апреля 2011

Я не знаю, но это работает для меня. Если кто-то может описать реальную причину, почему это работает таким образом, я буду очень рад .... Я звоню через appdelegate

[(myAppDelegate*)[[UIApplication sharedApplication] delegate]gameCenter];

ииз appdelegate я вызываю метод rootviewcontroller, например

-(void)gameCenter
{
    [rootViewController gameCenterLeaderboard];
}

, а в rootviewcontroller есть метод

-(void)gameCenterLeaderboard
{

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

        leaderboardVC.leaderboardDelegate = self; 
        [self presentModalViewController: leaderboardVC animated: YES];


    }

}

, следующий метод также переопределяется в rootviewcontroller

- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)leaderboardController
{

    [self dismissModalViewControllerAnimated:YES];
}
...