Передача Interger после запуска игры GameKit - PullRequest
0 голосов
/ 19 июня 2020

Я успешно использовал документацию Apple, чтобы подключить двух игроков через Game Center и запустить игру. Однако я несколько дней пытался заставить приложение отправлять данные между двумя игроками.

Мне просто нужно отправить целое число между двумя игроками, но я даже не могу запустить код документации даже после создание структур et c. Примеры, на которые я уже смотрел, устарели, или я не могу их собрать.

func sendPosition() {

let messageToSend = 123

//what do I need to do messageToSend to send it?

    do {
        try match.sendData(toAllPlayers: packet, with: .unreliable)
    } catch {
    }

    if error != nil {

        // Handle the error.
    }

}

    func match(_ match: GKMatch, didReceive data: Data, fromRemotePlayer player: GKPlayer) {
       //What do I need to do to receive the data?

       }

Если кто-то может помочь с каким-то рабочим кодом, с которым я могу поэкспериментировать в Swift 5+, я был бы благодарен.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Я создаю «контейнер» для отправки данных, таким образом я могу добавить инструкцию и то, что нужно сделать, в одном go. Например:

    var type:String = "jump"
    var data:CGPoint = CGPoint(x:10,y:10)
    
    let container:[Any] = [type, data]

    
do {
      let dataToSend = try NSKeyedArchiver.archivedData(withRootObject: container, requiringSecureCoding: true)
        try match.sendData(toAllPlayers: packet, with: .unreliable)
    } catch {
    }

    if error != nil {

        // Handle the error.
    }
0 голосов
/ 09 июля 2020

После некоторого чтения и воспроизведения мой исходный код, похоже, работал !!! Если кому-то еще поможет:

Отправить:

@IBAction func sendDataBtn(_ sender: Any) {
    print("sending data")
    let dataString = "Hello, World!"
    let dataToSend = dataString.data(using: .utf8)
    do {
    try myMatch.sendData(toAllPlayers: dataToSend!, with: .reliable)
    } catch {
        print(error.localizedDescription)
    }
}

Получить:

func match(_ match: GKMatch, didReceive data: Data, fromRemotePlayer player: GKPlayer) {
    print("Data Received")
    let receivedData = String(data: data, encoding: .utf8)
    messageLbl.text = receivedData
}
...