cocos2d-x Game Center

原文出处:http://www.cnblogs.com/jingjingWang/archive/2012/06/07/cocos2d-x.html

写这篇文章的主要用于给自己加强印象,帮助他人就是帮助自己.

本教程基于cocos2d-x 13版本编写 主要内容是告诉大家在c++中如何添加 game center ,找了很多网络上面的代码基本上都是缺胳膊少腿的,代码不完整,对于初学者来说是痛苦的。

本代码仅提供如何登陆GameCenter 显示和关闭Leaderboard(排行榜)。其他实现请参考子龙山人的博客,顺便贴下地址

http://www.cnblogs.com/zilongshanren/archive/2011/06/24/2088383.html 他讲解了很多东西。如何激活GameCenter等值得学习的文章。写的很细致哦
废话不说上贴上代码咯

我这里主要如何使用UIViewController 来实现GameCenter的呈现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//
//  GameKitHelper.h
//  toDefendTheEarth
//
//  Created by jingjing on 12-6-7.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
 
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <GameKit/GameKit.h>
 
@interface GameKitHelper :  NSObject <GKLeaderboardViewControllerDelegate, GKAchievementViewControllerDelegate, GKMatchmakerViewControllerDelegate, GKMatchDelegate>{
     BOOL gameCenterAvailable;
     BOOL userAuthenticated;
}
 
@property (assign, readonly) BOOL gameCenterAvailable;
 
+ (GameKitHelper *)sharedGameKitHelper;
- ( void ) authenticateLocalUser;
 
- ( void ) showLeaderboard;
- ( void )leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController;
 
@end

 

这是实现

?
//
//  GameKitHelper.m
//  toDefendTheEarth
//
//  Created by jingjing on 12-6-7.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
 
 
#import "GameKitHelper.h"
 
@implementation GameKitHelper
@synthesize gameCenterAvailable;
 
//静态初始化 对外接口
static GameKitHelper *sharedHelper = nil;
static UIViewController* currentModalViewController = nil;
+ (GameKitHelper *) sharedGameKitHelper {
     if (!sharedHelper) {
         sharedHelper = [[GameKitHelper alloc] init];
     }
     return sharedHelper;
}
 
//用于验证
- ( BOOL )isGameCenterAvailable {
     // check for presence of GKLocalPlayer API
     Class gcClass = (NSClassFromString(@ "GKLocalPlayer" ));
     
     // check if the device is running iOS 4.1 or later
     NSString *reqSysVer =@ "4.1" ;
     NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
     BOOL osVersionSupported = ([currSysVer compare:reqSysVer
                                            options:NSNumericSearch] != NSOrderedAscending);
     
     return (gcClass && osVersionSupported);
}
 
- (id)init {
     if ((self = [super init])) {
         gameCenterAvailable = [self isGameCenterAvailable];
         if (gameCenterAvailable) {
             NSNotificationCenter *nc =
             [NSNotificationCenter defaultCenter];
             [nc addObserver:self
                    selector:@selector(authenticationChanged)
                        name:GKPlayerAuthenticationDidChangeNotificationName
                      object:nil];
         }
     }
     return self;
}
 
//后台回调登陆验证
- ( void )authenticationChanged {
     
     if ([GKLocalPlayer localPlayer].isAuthenticated &&!userAuthenticated) {
         NSLog(@ "Authentication changed: player authenticated." );
         userAuthenticated = TRUE;
     } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) {
         NSLog(@ "Authentication changed: player not authenticated" );
         userAuthenticated = FALSE;
     }
     
}
 
- ( void )authenticateLocalUser {
     
     if (!gameCenterAvailable) return ;
     
     NSLog(@ "Authenticating local user..." );
     if ([GKLocalPlayer localPlayer].authenticated == NO) {
         [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
     } else {
         NSLog(@ "Already authenticated!" );
     }
}
 
//显示排行榜
- ( void ) showLeaderboard
{
     if (!gameCenterAvailable) return ;
     
     GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
     if (leaderboardController != nil) {
         leaderboardController.leaderboardDelegate = self;
         
         UIWindow *window = [[UIApplication sharedApplication] keyWindow];
         currentModalViewController = [[UIViewController alloc] init];
         [window addSubview:currentModalViewController.view];
         [currentModalViewController presentModalViewController:leaderboardController animated:YES];
     }
     
}
 
//关闭排行榜回调
- ( void )leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController{
     if (currentModalViewController !=nil){
         [currentModalViewController dismissModalViewControllerAnimated:NO];
         [currentModalViewController release];
         [currentModalViewController.view removeFromSuperview];
         currentModalViewController = nil;
     }
}

 好了。这个来说下如何调用它们吧。

先把AppDelegate.cpp 后缀修改为mm

在AppDelegate.mm里引入

?
#import "GameKitHelper.h"

 在 applicationDidFinishLaunching方法里调用,代码写在运行场景之前即可

?
//GameCenter登陆
[[GameKitHelper sharedGameKitHelper] authenticateLocalUser];

 到此登陆就ok啦。后面来教大家如何显示排行榜界面

?
//显示排行榜
[[GameKitHelper sharedGameKitHelper] showLeaderboard];

 只要把此代码写在你想要调用的方法中就可以了。别忘记了在调用类中引用头文件哦。。

忘记说了。更新一下。。这里需要添加一个 GmaeKit.framework的框架引用(属性 Build Phases->Link Binary With Libraries  add GameKit.framework)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值