Cocos2d iphone 游戏中心不解散吗?
当用户按“完成”时,我试图关闭游戏中心,为什么这不起作用??我看了苹果的文档,用谷歌搜索了一下,怎么了 GCHelper.hCocos2d 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
#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=self在showGameCenter
功能中,而不是在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];
}