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. // check if the device is running iOS 4.1 or later
  25. NSString *reqSysVer =@"4.1";
  26. NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
  27. BOOL osVersionSupported = ([currSysVer compare:reqSysVer
  28. options:NSNumericSearch] != NSOrderedAscending);
  29. return (gcClass && osVersionSupported);
  30. }
  31. - (id)init {
  32. if ((self = [super init])) {
  33. gameCenterAvailable = [self isGameCenterAvailable];
  34. if (gameCenterAvailable) {
  35. NSNotificationCenter *nc =
  36. [NSNotificationCenter defaultCenter];
  37. [nc addObserver:self
  38. selector:@selector(authenticationChanged)
  39. name:GKPlayerAuthenticationDidChangeNotificationName
  40. object:nil];
  41. }
  42. }
  43. return self;
  44. }
  45. //后台回调登陆验证
  46. - (void)authenticationChanged {
  47. if ([GKLocalPlayer localPlayer].isAuthenticated &&!userAuthenticated) {
  48. NSLog(@"Authentication changed: player authenticated.");
  49. userAuthenticated = TRUE;
  50. } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) {
  51. NSLog(@"Authentication changed: player not authenticated");
  52. userAuthenticated = FALSE;
  53. }
  54. }
  55. - (void)authenticateLocalUser {
  56. if (!gameCenterAvailable) return;
  57. NSLog(@"Authenticating local user...");
  58. if ([GKLocalPlayer localPlayer].authenticated == NO) {
  59. [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
  60. } else {
  61. NSLog(@"Already authenticated!");
  62. }
  63. }
  64. //显示排行榜
  65. - (void) showLeaderboard
  66. {
  67. if (!gameCenterAvailable) return;
  68. GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
  69. if (leaderboardController != nil) {
  70. leaderboardController.leaderboardDelegate = self;
  71. UIWindow *window = [[UIApplication sharedApplication] keyWindow];
  72. currentModalViewController = [[UIViewController alloc] init];
  73. [window addSubview:currentModalViewController.view];
  74. [currentModalViewController presentModalViewController:leaderboardController animated:YES];
  75. }
  76. }
  77. //关闭排行榜回调
  78. - (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController{
  79. if(currentModalViewController !=nil){
  80. [currentModalViewController dismissModalViewControllerAnimated:NO];
  81. [currentModalViewController release];
  82. [currentModalViewController.view removeFromSuperview];
  83. currentModalViewController = nil;
  84. }
  85. }
复制代码

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

先把AppDelegate.cpp 后缀修改为mm

在AppDelegate.mm里引入

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

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

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

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

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

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

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

Cocos2d-X 中文论坛原帖:http://cn.cocos2d-x.org/bbs/forum.php?mod=viewthread&tid=1206


http://bbs.9ria.com/thread-248408-1-1.html

更多的一些内容


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子图书资源服务系统是一款基于 Java Swing 的 C-S 应用,旨在提供电子图书资源一站式服务,可从系统提供的图书资源中直接检索资源并进行下载。.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(若有),项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值