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からの参照。しかし、どのクラスがデリゲートを自分自身に呼び出すのか理解できませんでし

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;

@終わり

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 ");
}
4

2 に答える 2

2

今日は少し自分でこれに苦労しました。

コツは、GKLocalPlayerListener プロトコルを実装するオブジェクトを localPlayer のリスナーとして登録することです。えーと...まあ、その文はそれ自体にループバックしているようですが、これは役立つかもしれません.

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

その後、同じオブジェクトでプロトコル メソッドを実装します。

編集:ああ!また、GKChallengeListener を実装することは想定されていません。GKLocalPlayerListener のみを実装する必要があります。(そのリンクを貼るつもりだったのですが、今見つけられたら危ないです。)

それが役立つことを願っています。

于 2014-08-29T01:31:55.943 に答える