Cocos2d iphone 游戏中心不解散吗?

Cocos2d iphone 游戏中心不解散吗?,cocos2d-iphone,game-center,dismiss,spritebuilder,Cocos2d Iphone,Game Center,Dismiss,Spritebuilder,当用户按“完成”时,我试图关闭游戏中心,为什么这不起作用??我看了苹果的文档,用谷歌搜索了一下,怎么了 GCHelper.h #import <Foundation/Foundation.h> #import <GameKit/GameKit.h> @protocol GameCenterManagerDelegate @end @interface GCHelper : NSObject <GKGameCenterControllerDelegate, GK

当用户按“完成”时,我试图关闭游戏中心,为什么这不起作用??我看了苹果的文档,用谷歌搜索了一下,怎么了

GCHelper.h

#import <Foundation/Foundation.h>
#import <GameKit/GameKit.h>

@protocol GameCenterManagerDelegate

@end

@interface GCHelper : NSObject <GKGameCenterControllerDelegate, GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate> {

BOOL gameCenterAvailable;
BOOL userAuthenticated;

UIViewController *presentingViewController;
id <GameCenterManagerDelegate> delegate;

}
@property (nonatomic, strong)  id <GameCenterManagerDelegate> delegate;
@property (assign, readonly) BOOL gameCenterAvailable;
@property (retain) UIViewController *presentingViewController;

+ (GCHelper *) showGameCenter;
+ (GCHelper *)sharedInstance;
- (void)authenticateLocalUser;

@end

需要解除的不是控制器,而是通过函数
-(void)GameCenterViewControllerdFinish
中的参数接收的
GKGameCenterViewController
。您应该这样做:

- (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController{
    [gameCenterViewController dismissViewControllerAnimated:YES completion:nil];
}
编辑:您还必须将控制器的代理设置为当前场景,并在类的.h文件中实现

//In your .h file
@interface foo : CCScene <GKGameCenterControllerDelegate>{
}

//In you .m file
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];

if (gameCenterController != NULL)
{
    gameCenterController.gameCenterDelegate = self;
    [[CCDirector sharedDirector]presentViewController:gameCenterController animated:YES completion:nil];
}
//在.h文件中
@界面foo:CCScene{
}
//在you.m文件中
GKGameCenterViewController*gameCenterController=[[GKGameCenterViewController alloc]init];
如果(gameCenterController!=NULL)
{
gameCenterController.gameCenterDelegate=self;
[[CCDirector sharedDirector]presentViewController:gameCenterController动画:是完成:无];
}

必须将视图控制器的
委托
属性设置为当前场景。查看我的更新答案,了解完整代码!您是否将
GKGameCenterControllerDelegate
协议分配给.h文件中的类?我想你的类是CCScene?试着把
gameCenterController.gameCenterDelegate=selfshowGameCenter
功能中,而不是在
GameCenterViewControllerdFinish
中进行编码>。委托告诉viewController您的哪个对象将控制和实现函数以关闭视图。我认为您会遇到此错误,因为您的
showGameCenter
是类函数(+),而不是实例(-)函数。尝试将其作为一个实例函数,删除@synchronized(self)并通过执行
[[GCHelper sharedhelp]showGameCenter]调用您的函数。您的gameCenterDelegate无法接收类,但只能接收该类的实例,因此必须使用(-)而不是(+)。您应该看看这个()GameCenter助手,这就是我现在正在使用的。查找
showleadboard
函数糟糕,您的选择器称为sharedInstance,而不是sharedHelper。您确实在.h文件中更改了showGameCenter
中的+,对吗?这两个错误只是因为XCode找不到选择器,所以在调用选择器或创建选择器时拼写错误。它还取决于您调用[[GCHelper sharedInstance]showGameCenter]的位置,如果您是从类中的(-)函数调用它,则只能使用[self showGameCenter]
//In your .h file
@interface foo : CCScene <GKGameCenterControllerDelegate>{
}

//In you .m file
GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init];

if (gameCenterController != NULL)
{
    gameCenterController.gameCenterDelegate = self;
    [[CCDirector sharedDirector]presentViewController:gameCenterController animated:YES completion:nil];
}