玩家没收GKTurnBasedMatch

时间:2012-08-12 08:21:14

标签: ios gamekit

说我有一个GKTurnBasedMatch有2个玩家,而第二个玩家在他的回合中被没收。如何向第一个用户显示该游戏已结束?或者也许让第一个玩家以编程方式退出?

另一个GKTurnBasedMatch--这次是12名球员。我不明白这里有什么 - 比如玩家7退出,这意味着当转弯到达他时,它会卡住游戏,我需要以编程方式结束所有用户的比赛?或者GC可能会对其余玩家进行相应的重新编号

提前致谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我创建了game kit turn based match example project,说明轮流退出并轮流退出。请查看quit()文件中的GameModel.swift函数,了解如何调用这些函数:

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)
    }
}

所有这些在整个示例项目的上下文中更有意义。我希望它有所帮助。