2013-10-29 60 views
1

我想在我的代码中实现GKChallengeListener,并且我使用了Apple的GameCenterManager类。玩家被认证为优秀并且排行榜,并且挑战也是。 But i want to notify my application when the remote player completed the challenge. for this i have used GKChallengeListener protocols. but they are not calling up when i am sending or receiving the challenges参考。但我DNT了解哪一个类将调用delgate自我 https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKEventListener_Ref/Reference/Reference.html#//apple_ref/occ/intf/GKChallengeListener哪些类用于实现GKLocalPlayerListener协议

在ViewController.h

@interface ViewController : UIViewController <UIActionSheetDelegate, GameCenterManagerDelegate,GKGameCenterControllerDelegate,GKChallengeListener> { 
    GameCenterManager *gameCenterManager; 
    NSInteger currentScore; 
    NSString* currentLeaderBoard; 
    IBOutlet UILabel *currentScoreLabel; 
} 
@property (nonatomic, retain) GameCenterManager *gameCenterManager; 
@property (nonatomic, assign) NSInteger currentScore; 
@property (nonatomic, retain) NSString* currentLeaderBoard; 
@property (nonatomic, retain) UILabel *currentScoreLabel; 
- (IBAction) showLeaderboard; 
- (IBAction) increaseScore; 

@end

在ViewController.m

@implementation ViewController 

@synthesize gameCenterManager; 
@synthesize currentScore; 
@synthesize currentLeaderBoard; 
@synthesize currentScoreLabel; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.currentLeaderBoard = kLeaderboardID; 
    self.currentScore = 0; 
    if ([GameCenterManager isGameCenterAvailable]) { 
     self.gameCenterManager = [[GameCenterManager alloc] init]; 
     [self.gameCenterManager setDelegate:self]; 
     [self.gameCenterManager authenticateLocalUser]; 
    } else { 
     // The current device does not support Game Center. 
    } 
} 

-(void)player:(GKPlayer *)player issuedChallengeWasCompleted:(GKChallenge *)challenge byFriend:(GKPlayer *)friendPlayer{ 
    NSLog(@"issued challenge was completed by friend"); 

} 
-(void)player:(GKPlayer *)player didCompleteChallenge:(GKChallenge *)challenge issuedByFriend:(GKPlayer *)friendPlayer{ 
    NSLog(@"player did complete challenge"); 
} 
-(void)player:(GKPlayer *)player didReceiveChallenge:(GKChallenge *)challenge{ 
    NSLog(@"player did recieve challenge"); 
} 
-(void)player:(GKPlayer *)player wantsToPlayChallenge:(GKChallenge *)challenge{ 
    NSLog(@"player wants to play challenge "); 
} 
+0

请加评论,如果你downvote – iOS

回答

3

这是在贬值iOS 7.0,但你仍然可以使用它作为替代

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.currentLeaderBoard = kLeaderboardID; 
    self.currentScore = 0; 
    if ([GameCenterManager isGameCenterAvailable]) { 

     self.gameCenterManager = [[GameCenterManager alloc] init]; 
     [self.gameCenterManager setDelegate:self]; 
     [self.gameCenterManager authenticateLocalUser]; 
    } else { 
     // The current device does not support Game Center. 
    } 
GKChallengeEventHandler 
    *gk 
    =[GKChallengeEventHandler challengeEventHandler].delegate=self; 
} 

- (void)localPlayerDidCompleteChallenge:(GKChallenge *)challenge 
{ 
    NSLog(@"localPlayerDidCompleteChallenge"); 
} 
- (void)localPlayerDidReceiveChallenge:(GKChallenge *)challenge 
{ 
    NSLog(@"localPlayerDidReceiveChallenge"); 
} 
- (void)localPlayerDidSelectChallenge:(GKChallenge *)challenge{ 
    NSLog(@"localPlayerDidSelectChallenge"); 
} 
- (void)remotePlayerDidCompleteChallenge:(GKChallenge *)challenge{ 
    NSLog(@"remotePlayerDidCompleteChallenge"); 
} 
- (BOOL)shouldShowBannerForLocallyCompletedChallenge:(GKChallenge *)challenge 
{ 
    return YES; 
} 
- (BOOL)shouldShowBannerForLocallyReceivedChallenge:(GKChallenge *)challenge 
{ 
    return YES; 
} 
- (BOOL)shouldShowBannerForRemotelyCompletedChallenge:(GKChallenge *)challenge 
{ 
    return YES; 
} 
2

今天就为自己挣扎了一下。

诀窍是将实现GKLocalPlayerListener协议的对象注册为localPlayer的侦听器。呃......那句话似乎已经循环回来了,但这可能有帮助。

/* this happens inside my authenticateLocalPlayer method */ 
if ([GKLocalPlayer localPlayer].authenticated) { 
    [[GKLocalPlayer localPlayer] registerListener:self]; 
    // More stuff here 
    } 

然后在同一个对象中实现协议方法。

编辑:哦!而且你不应该实现GKChallengeListener。你只应该实现GKLocalPlayerListener。 (我打算发布一个链接,但如果我现在可以找到它,就会发生危险)。

希望有所帮助。