【问题标题】:which class is used to implement the GKLocalPlayerListener protocols哪个类用于实现 GKLocalPlayerListener 协议
【发布时间】:2013-10-29 10:34:21
【问题描述】:

我正在尝试在我的代码中实现 GKChallengeListener,并且我使用了来自苹果的 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 参考来自。但我不明白哪个班级会将委托人称为自我 https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKEventListener_Ref/Reference/Reference.html#//apple_ref/occ/intf/GKChallengeListener

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

【问题讨论】:

  • 投反对票请添加cmets

标签: ios delegates game-center


【解决方案1】:

这在 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。 (我打算发布一个链接,但如果我现在能找到它,那我就冒险了。)

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多