在我的遊戲中,玩家需要使用蘋果遊戲中心登錄。如果他們是新玩家,他們必須首先登錄到Game Center,因爲我使用playerID作爲用於設置新用戶帳戶的數據的一部分。遊戲中心登錄
我有一個GameCenter類,我用它來簽名玩家,或者提示他們登錄,如果他們還沒有,這是主代碼。
-(void) setup
{
gameCenterAuthenticationComplete = NO;
if (!isGameCenterAPIAvailable()) {
// Game Center is not available.
NSLog(@"Game Center is not available.");
} else {
NSLog(@"Game Center is available.");
__weak typeof(self) weakSelf = self; // removes retain cycle error
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; // localPlayer is the public GKLocalPlayer
__weak GKLocalPlayer *weakPlayer = localPlayer; // removes retain cycle error
weakPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
{
if (viewController != nil)
{
[weakSelf showAuthenticationDialogWhenReasonable:viewController];
}
else if (weakPlayer.isAuthenticated)
{
[weakSelf authenticatedPlayer:weakPlayer];
}
else
{
[weakSelf disableGameCenter];
}
};
}
}
-(void)showAuthenticationDialogWhenReasonable:(UIViewController *)controller
{
[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:controller animated:YES completion:nil];
}
-(void)authenticatedPlayer:(GKLocalPlayer *)player
{
NSLog(@"%@,%@,%@",player.playerID,player.displayName, player.alias);
localPlayer = player;
gameCenterAuthenticationComplete = YES;
}
-(void)disableGameCenter
{
}
而且工作正常。但我有兩個問題。
1)正如我所說如果玩家是新玩家,那麼他們必須先登錄Game Center,然後才能開始新用戶註冊。這個新的註冊是在另一個班級。那麼如何讓其他班級聽取GameCenter的變量gameCenterAuthenticationComplete = YES?我在其他地方讀過我可以使用委託,但是這是否可以跨對象使用?對象中的通知會更好嗎?
2)更重要的是,如果玩家關閉了登錄GameCenter的模式會發生什麼,當模式關閉時回撥/阻止的位置在哪裏?所以我可以提示他們再次登錄或至少在屏幕上放置一個味精?
關於第2點,我該如何使用它?它去哪裏?在ny代碼中view_controller是viewController嗎? – Phil 2013-03-27 08:24:27
gamecenter是您用來呈現遊戲中心排行榜的視圖控制器。你可以在委託中使用這個方法(GKLeaderBoardDelegate),或者如果你有單獨的viewcontroller和.xib,你也可以在這個類的主文件(.m)中使用[self dismissModalViewControllerAnimated:NO];在這種情況下,你也必須在你的類的.h文件的接口中提到GKLeaderBoardDelegate以觸發該方法 – hariszaman 2013-03-27 09:12:06