Cocos2d-X 添加 Game Center 的方法

来源:互联网 发布:外汇数据接口api 编辑:程序博客网 时间:2024/05/21 10:22

本教程基于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
原创粉丝点击