2015-06-07 52 views
0

所以我有一個應用程序有Game AGame BGame Center - 提交給非默認排行榜

我有遊戲中心正確實施遊戲A(我使用AppCoda tutorial,就像我目前爲止的每場比賽一樣)。

現在我有麻煩得到它提交比分,如果比賽乙玩。我需要將分數提交到在iTunes Connect中創建的第二個排行榜。

這是我的我的視圖控制器的一部分,該認證用戶並使用該標識符排行榜等

ViewController.h:

-(void)authenticateLocalPlayer{ 
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){ 
    if (viewController != nil) { 
     [self presentViewController:viewController animated:YES completion:nil]; 
    } 
    else{ 
     if ([GKLocalPlayer localPlayer].authenticated) { 
      _gameCenterEnabled = YES;         //added bool indentier to .h 

      // Get the default leaderboard identifier. 
      [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) { 

       if (error != nil) { 
        NSLog(@"%@", [error localizedDescription]); 
       } 
       else{ 
        _leaderboardIdentifier = leaderboardIdentifier;  //added pointer to NSString to .h 
       } 
      }]; 
     } 

     else{ 
      _gameCenterEnabled = NO; 
     } 
    } 
}; 

}

似乎我的遊戲B視圖控制器是評分/提交就像遊戲A,我想我可以只是將上面的代碼更改爲:(允許第二個標識符):

-(void)authenticateLocalPlayer{ 
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){ 
    if (viewController != nil) { 
     [self presentViewController:viewController animated:YES completion:nil]; 
    } 
    else{ 
     if ([GKLocalPlayer localPlayer].authenticated) { 
      _gameCenterEnabled = YES;         //added bool indentier to .h 
      _gameCenterEnabled2 = YES; 

      // Get the default leaderboard identifier. 
      [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) { 

       if (error != nil) { 
        NSLog(@"%@", [error localizedDescription]); 
       } 
       else{ 
        _leaderboardIdentifier = leaderboardIdentifier;  //added pointer to NSString to .h 
       } 
      }]; 

      // Get the second leaderboard identifier. 
      [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier2, NSError *error) { 

       if (error != nil) { 
        NSLog(@"%@", [error localizedDescription]); 
       } 
       else{ 
        _leaderboardIdentifier2 = leaderboardIdentifier2;  //added pointer to NSString to .h 
       } 
      }]; 


     } 

     else{ 
      _gameCenterEnabled = NO; 
      _gameCenterEnabled2 = NO; 
     } 
    } 
}; 

}

但由於某些原因,它不會發得分第二排行榜和我無法找到如何將分數提交給「非默認」排行榜的任何資源/教程。 ..

回答

0

好的,所以我重新閱讀Apple Doc,找到了解決方案。

很明顯,只能有一個默認的排行榜(在我的問題中,在代碼中進行身份驗證和設置)......這並不需要像我原先想象的那樣改變。 (我忘了它是用來設置默認的主板)。

所以我需要做的是將排行榜標識符設置爲第二個排行榜的標識符(這將是您在製作第二排行榜時在iTunes Connect中使用的任何ID)。

報告這樣的成績,當我做到了在比賽B視圖控制器:

-(void)reportScore{ 

//set identifier manually as it's not the default leaderboard 
GKScore *score = [[GKScore alloc] initWithLeaderboardIdentifier:@"The_GameB_Leaderboard"]; 
//GKScore *score = [[GKScore alloc] initWithLeaderboardIdentifier:_leaderboardIdentifier2]; 

score.value = ScoreNumber_B; //Game B HighScore 

[GKScore reportScores:@[score] withCompletionHandler:^(NSError *error) { 
    if (error != nil) { 
     NSLog(@"%@", [error localizedDescription]); 
    } 
}]; 
NSLog(@"Reported to Game Center..."); 

}

有沒有必要改變-(void)authenticateLocalPlayer方法,除非你需要添加GameB bool像我一樣在這種情況下,你可以將其添加在GameA Bool如下:

if ([GKLocalPlayer localPlayer].authenticated) { 
     _gameCenterEnabled = YES;  //added bool indentier to .h 
     _gameCenterEnabled2 = YES;  //GameB bool 
    . 
    . 
    . 
} 

我希望這有助於。

相關問題