您的位置:首页 > 移动开发 > Cocos引擎

【COCOS2DX-游戏开发之五】添加GameCenter

2013-05-23 14:00 330 查看
注意:在越狱手机上测试GameCenter,可能会出现 This game is not recongnized by Game Center. 此时请用没越狱手机测试
http://hi.baidu.com/qq5292485/blog/item/61c4e60e069c900a6159f374.html
1、cocos2d-x是基于c++代码,而apple提供的api是基于object-c,此时你需要先了解c++中如何调用object-c进行混合编程的,这个可以参考http://www.himigame.com/iphone-cocos2dx/743.html这篇文章,写的很详细,接着参考http://www.himigame.com/iphone-cocos2d/535.html接入gamecenter,但补充一点,就是在游戏中,当需要通过按钮直接显示出排行榜的时候,又该如何实现呢?

查了下苹果的官方文档找到了 哈哈,代码如下:(*前提该类必须要实现GKLeaderboardViewController<GKLeaderboardViewControllerDelegate>)

- (void) showLeaderboard
{
    GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
    if (leaderboardController != nil)
    {
        leaderboardController.leaderboardDelegate = self;
        [self presentModalViewController: leaderboardController animated: YES];
    }
}


当关闭的时候需要调用如下方法
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
{
    [self dismissModalViewControllerAnimated:YES];
}


请注意在上面的showLeaderboard方法中 由于该类为UIViewController,所以直接再本身添加,如果需要添加到cocos2d-x中呢,可以改为

- (void) showLeaderboard
{
    tempVC=[[UIViewControlleralloc] init];
    GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewControlleralloc] init];
    if (leaderboardController != nil)
    {
        UIApplication* clientApp = [UIApplicationsharedApplication];
        UIWindow* topWindow = [clientApp keyWindow];
        if (!topWindow)
        {
            topWindow = [[clientApp windows] objectAtIndex:0];
        }
        [topWindow addSubview:tempVC.view];
        leaderboardController.leaderboardDelegate = self;
        [tempVCpresentModalViewController: leaderboardController animated: YES];
    }
}
-(void) leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
{
    [tempVCdismissModalViewControllerAnimated:YES];//在iphone上需要设置为NO,才可以继续响应事件(笔者还没有找到其他解决办法)
    [tempVC.viewremoveFromSuperview]; //为了使排行榜关闭的时候,能够继续响应事件
}


下面给出官方对于显示成就的代码(将其转换到cocos2d-x跟上面是一样原理了)

- (void) showGameCenter
{    
    GKGameCenterViewController* gameCenterController = [[GKGameCenterViewController alloc] init];
    if (gameCenterController != nil) {
        gameCenterController.gameCenterDelegate = self;
        
        UIWindow *window = [[UIApplication sharedApplication] keyWindow];
        currentGameCenterController = [[UIViewController alloc] init];
        [window addSubview:currentGameCenterController.view];
        
        if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) {
            [currentGameCenterController presentModalViewController:gameCenterController animated:YES];
        } else {
            [currentGameCenterController presentViewController:gameCenterController animated: YES completion:nil];
        }
    }
}
关闭GameCenter

- (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
{
    if(currentGameCenterController !=nil){
        if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) {
            [currentGameCenterController dismissModalViewControllerAnimated:NO];
        } else {
            [currentGameCenterController dismissViewControllerAnimated:NO completion:nil];
        }
        
        [currentGameCenterController release];
        [currentGameCenterController.view removeFromSuperview];
        currentGameCenterController = nil;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐