Данные не получены с помощью GameKit на swift

#swift #game-center #gamekit

Вопрос:

В настоящее время я создаю многопользовательскую игру с GameKit. Я хочу создать ожидающий контроллер просмотра, пока каждый игрок получает массив игроков и то, что они выбрали для своего персонажа.

Вот мое расширение

 extension LoadingViewController: GKMatchDelegate {
    
    func sendData() {
            guard let match = match else { return }
            
            do {
                guard let data = gameModel.encode() else { return }
                try match.sendData(toAllPlayers: data, with: .reliable)
            } catch {
                print("Send data failed")
            }
        }
    
    func match(_ match: GKMatch, didReceive data: Data, fromRemotePlayer player: GKPlayer) {
        guard let model = GameModel.decode(data: data) else { return }
        gameModel = model
    }
}
 

Мое переопределение, которое ждет, пока 2 игрока не заполнят игровую модель

 override func viewDidLoad() {
        super.viewDidLoad()
        
        Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { timer in
            self.setupPlayers()
            if self.gameModel.players.count == 2 {
                if let view = self.view as! SKView? {
                    // Load the SKScene from 'GameScene.sks'
                    if let scene = SKScene(fileNamed: "GameScene") as? GameScene {
                        scene.match = self.match
                        scene.gameModel = self.gameModel
                        scene.localPlayer = self.localPlayer
                        scene.size = view.bounds.size
                        scene.scaleMode = .resizeFill
                        // Present the scene
                        view.presentScene(scene)
                        timer.invalidate()
                        
                        view.ignoresSiblingOrder = true
                        
                        view.showsFPS = true
                        view.showsNodeCount = true
                    }
                }
            }
        }
    }
 

И setupPlayers, который вызывается каждый раз, чтобы попытаться добавить игрока и установить его предпочтения

 private func setupPlayers() {

        guard let player2Name = match?.players.first?.displayName else { return }
        let player1 = Player(displayName: GKLocalPlayer.local.displayName)
        let player2 = Player(displayName: player2Name)
        
        var players = [player1,player2]
        
        players.sort { (player1, player2) -> Bool in
            player1.displayName < player2.displayName
        }
        if players.first?.displayName == GKLocalPlayer.local.displayName {
            if gameModel.players.count == 0 {
                players[0].index = .one
                players[0].race = .orc
                gameModel.players.append(players[0])
                localPlayer = players[0]
                sendData()
            }
        } else {
            if gameModel.players.count == 1 {
                players[1].index = .two
                players[1].race = .human
                gameModel.players.append(players[1])
                localPlayer = players[1]
                sendData()
            }
        }
    }
 

Однако сцена не появляется, когда я делаю моделирование, я пытался найти ошибку, и когда первый игрок заходит в настройки игроков, это работает, и GameModel.players.count теперь равен 1, но второй игрок никогда не получает его, а его собственная игровая модель остается на одном
Кто-нибудь знает, почему ?

Комментарии:

1. «Данные»? На случай, если вы не знали, слово «данные» — это данные во множественном числе.

2. не знал, что это