Cocos2d-X 添加 Game Center 的方法

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

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

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

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

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

  1. //
  2. //  GameKitHelper.h
  3. //  toDefendTheEarth
  4. //
  5. //  Created by jingjing on 12-6-7.
  6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
  7. //

  8. #import <UIKit/UIKit.h>
  9. #import <Foundation/Foundation.h>
  10. #import <GameKit/GameKit.h>

  11. @interface GameKitHelper :  NSObject <GKLeaderboardViewControllerDelegate, GKAchievementViewControllerDelegate, GKMatchmakerViewControllerDelegate, GKMatchDelegate>{
  12.     BOOL gameCenterAvailable;
  13.     BOOL userAuthenticated;
  14. }

  15. @property (assign, readonly) BOOL gameCenterAvailable;

  16. + (GameKitHelper *)sharedGameKitHelper;
  17. - (void) authenticateLocalUser;

  18. - (void) showLeaderboard;
  19. - (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController;

  20. @end
复制代码


这是实现

  1. //
  2. //  GameKitHelper.m
  3. //  toDefendTheEarth
  4. //
  5. //  Created by jingjing on 12-6-7.
  6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
  7. //


  8. #import "GameKitHelper.h"

  9. @implementation GameKitHelper
  10. @synthesize gameCenterAvailable;

  11. //静态初始化 对外接口
  12. static GameKitHelper *sharedHelper = nil;
  13. static UIViewController* currentModalViewController = nil;
  14. + (GameKitHelper *) sharedGameKitHelper {
  15.     if (!sharedHelper) {
  16.         sharedHelper = [[GameKitHelper alloc] init];
  17.     }
  18.     return sharedHelper;
  19. }

  20. //用于验证
  21. - (BOOL)isGameCenterAvailable {
  22.     // check for presence of GKLocalPlayer API
  23.     Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
  24.    
  25.     // check if the device is running iOS 4.1 or later
  26.     NSString *reqSysVer =@"4.1";
  27.     NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
  28.     BOOL osVersionSupported = ([currSysVer compare:reqSysVer
  29.                                            options:NSNumericSearch] != NSOrderedAscending);
  30.    
  31.     return (gcClass && osVersionSupported);
  32. }

  33. - (id)init {
  34.     if ((self = [super init])) {
  35.         gameCenterAvailable = [self isGameCenterAvailable];
  36.         if (gameCenterAvailable) {
  37.             NSNotificationCenter *nc =
  38.             [NSNotificationCenter defaultCenter];
  39.             [nc addObserver:self
  40.                    selector:@selector(authenticationChanged)
  41.                        name:GKPlayerAuthenticationDidChangeNotificationName
  42.                      object:nil];
  43.         }
  44.     }
  45.     return self;
  46. }

  47. //后台回调登陆验证
  48. - (void)authenticationChanged {
  49.    
  50.     if ([GKLocalPlayer localPlayer].isAuthenticated &&!userAuthenticated) {
  51.         NSLog(@"Authentication changed: player authenticated.");
  52.         userAuthenticated = TRUE;
  53.     } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) {
  54.         NSLog(@"Authentication changed: player not authenticated");
  55.         userAuthenticated = FALSE;
  56.     }
  57.    
  58. }

  59. - (void)authenticateLocalUser {
  60.    
  61.     if (!gameCenterAvailable) return;
  62.    
  63.     NSLog(@"Authenticating local user...");
  64.     if ([GKLocalPlayer localPlayer].authenticated == NO) {
  65.         [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
  66.     } else {
  67.         NSLog(@"Already authenticated!");
  68.     }
  69. }

  70. //显示排行榜
  71. - (void) showLeaderboard
  72. {
  73.     if (!gameCenterAvailable) return;
  74.    
  75.     GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
  76.     if (leaderboardController != nil) {
  77.         leaderboardController.leaderboardDelegate = self;
  78.        
  79.         UIWindow *window = [[UIApplication sharedApplication] keyWindow];
  80.         currentModalViewController = [[UIViewController alloc] init];
  81.         [window addSubview:currentModalViewController.view];
  82.         [currentModalViewController presentModalViewController:leaderboardController animated:YES];
  83.     }
  84.    
  85. }

  86. //关闭排行榜回调
  87. - (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController{
  88.     if(currentModalViewController !=nil){
  89.         [currentModalViewController dismissModalViewControllerAnimated:NO];
  90.         [currentModalViewController release];
  91.         [currentModalViewController.view removeFromSuperview];
  92.         currentModalViewController = nil;
  93.     }
  94. }
复制代码

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

先把AppDelegate.cpp 后缀修改为mm

在AppDelegate.mm里引入

  1. #import "GameKitHelper.h"
复制代码

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

  1. //GameCenter登陆
  2. [[GameKitHelper sharedGameKitHelper] authenticateLocalUser];
复制代码

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

  1. //显示排行榜
  2. [[GameKitHelper sharedGameKitHelper] showLeaderboard];
复制代码

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

忘记说了。更新一下。。这里需要添加一个 GmaeKit.framework的框架引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值