2012-08-12 65 views
0

假設我有一個GKTurnBasedMatch,其中有兩名玩家,第二名在他的回合中沒收。我應該如何向第一個用戶顯示該遊戲已結束?或者也許讓第一個玩家以編程方式退出?玩家喪失GKTurnBasedMatch

另一個GKTurnBasedMatch-這次有12名玩家。我在這裏不理解任何東西 - 說7號球員退出,這意味着當轉到他時,它會卡住遊戲,我將需要以編程方式結束該比賽給所有用戶?或者,也許GC相應地重新編號其餘的玩家?

在此先感謝!

回答

1

您需要發送以下到您GKTurnBasedMatch對象之一:

- (void)participantQuitInTurnWithOutcome:(GKTurnBasedMatchOutcome)matchOutcome 
         nextParticipants:(NSArray *)nextParticipants 
          turnTimeout:(NSTimeInterval)timeout 
           matchData:(NSData *)matchData 
         completionHandler:(void (^)(NSError *error))completionHandler 

- (void)participantQuitOutOfTurnWithOutcome:(GKTurnBasedMatchOutcome)matchOutcome 
         withCompletionHandler:(void (^)(NSError *error))completionHandler 

調用participantQuitOutOfTurnWithOutcome將轉向事件發送到其他球員在比賽中通知他們,一個球員已經退出。玩家在match.participants中的對象將具有matchOutcome GKTurnBasedMatchOutcomeQuit

0

我創建了一個game kit turn based match example project,它說明了輪流退出並依次退出。看看在GameModel.swift文件quit()功能,看看如何調用這些:

func quit(completionHandler: @escaping (Error?) -> Void) { 
    if isLocalPlayerTurn { 
     let next = nextParticipants() 
     let data = NSKeyedArchiver.archivedData(withRootObject: self) 
     match?.participantQuitInTurn(with: .quit, nextParticipants: next, turnTimeout: 600, match: data) { error in 
      completionHandler(error) 
     } 
    } else { 
     match?.participantQuitOutOfTurn(with: .quit) { error in 
      completionHandler(error) 
     } 
    } 
} 

當然,檢查,看看是否有人已經贏得也很重要。這是來自同一個文件的checkForWin()函數。

func checkForWin(completionHandler: @escaping (Bool, Error?) -> Void) { 
    guard let stillPlaying = match?.participants?.filter({ $0.matchOutcome == .none }), 
     stillPlaying.count == 1, 
     stillPlaying[0].player?.playerID == currentPlayerID 
     else { 
      return completionHandler(false, nil) 
    } 

    stillPlaying[0].matchOutcome = .won 
    let data = NSKeyedArchiver.archivedData(withRootObject: self) 

    match?.endMatchInTurn(withMatch: data) { error in 
     print("***** match ended") 
     completionHandler(true, error) 
    } 
} 

所有這些在整個示例項目的上下文中都更有意義。我希望它有幫助。