[英]Player forfeiting a GKTurnBasedMatch
假設我有一個有2個玩家的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
者QuitOutOfTurnWithOutcome會將轉牌事件發送給比賽中的其他玩家,以通知他們該玩家已退出。 match.participant中的玩家對象將具有matchOutcome GKTurnBasedMatchOutcomeQuit
我已經創建了一個基於游戲工具回合的比賽示例項目 ,該項目說明了不按順序退出和依次退出的情況。 看一下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)
}
}
在整個示例項目的上下文中,所有這些都更有意義。 希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.