假設我有一個GKTurnBasedMatch,其中有兩名玩家,第二名在他的回合中沒收。我應該如何向第一個用戶顯示該遊戲已結束?或者也許讓第一個玩家以編程方式退出?玩家喪失GKTurnBasedMatch
另一個GKTurnBasedMatch-這次有12名玩家。我在這裏不理解任何東西 - 說7號球員退出,這意味着當轉到他時,它會卡住遊戲,我將需要以編程方式結束該比賽給所有用戶?或者,也許GC相應地重新編號其餘的玩家?
在此先感謝!
假設我有一個GKTurnBasedMatch,其中有兩名玩家,第二名在他的回合中沒收。我應該如何向第一個用戶顯示該遊戲已結束?或者也許讓第一個玩家以編程方式退出?玩家喪失GKTurnBasedMatch
另一個GKTurnBasedMatch-這次有12名玩家。我在這裏不理解任何東西 - 說7號球員退出,這意味着當轉到他時,它會卡住遊戲,我將需要以編程方式結束該比賽給所有用戶?或者,也許GC相應地重新編號其餘的玩家?
在此先感謝!
您需要發送以下到您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
我創建了一個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)
}
}
所有這些在整個示例項目的上下文中都更有意義。我希望它有幫助。