#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. не знал, что это