2017-02-13 9 views
1

Я создаю игру, в которой используется GameCenter, и я пытаюсь отправить и получить данные.Отправить и получить данные из GameCenter: Swift

Это, как я отправляю данные: (функция «SendData» предоставленный GameCenter с GameKit)

let nick = GCHelper() 
let data = NSData(contentsOfFile: "") 
try! nick.match.sendData(toAllPlayers: data as! Data, with: .reliable) 

«GCHelper» является класс я использую, который содержит много функции для Game Center, загрузка будет проходить через вопросы, если вы заинтересованы. Мне просто нужно было вызвать его для доступа к функции.

Затем, чтобы получить данные, которые я пытаюсь использовать это:

nick.match(GKMatch, didReceive: Data, fromPlayer: String) 

Примечание: Я не заполнили ни в одном из указанных выше параметров

Вот функция, которую я использую для извлечения данных:

public func match(_ theMatch: GKMatch, didReceive data: Data, fromPlayer playerID: String) { 
    if match != theMatch { 
     return 
    } 

    delegate?.match(theMatch, didReceiveData: data, fromPlayer: playerID) 
} 

Функция, использующая 'match()', отличается от класса GCHelper. GCHelper позволяет вам легче создавать GameCenter. Вот ссылка, если вы хотите, чтобы ссылаться на него: https://github.com/jackcook/GCHelper

ВОПРОС Теперь, когда я показал вам все методы, как бы я использовать предыдущий метод для извлечения данных? Один из его параметров - «fromPlayer» и запрашивает playerId (String), но как я узнаю, что такое другой игрок playerID? Еще лучше, как бы получить его?

Если вы не думаете, что это хороший способ обработки данных, как я могу сделать это лучше? Есть ли другой способ сделать это?

Основные сведения: Игра требует 2 человек, и данные обмениваются между этими двумя людьми. Мне нужно знать, как отправлять и извлекать данные среди 2. Спасибо за помощь! Если у вас есть какие-либо вопросы, дайте мне знать.

+0

Вы могли решить эту проблему? У меня такая же проблема в одной из моих игр. –

+0

Да, я сделал, я сейчас не дома, но когда я вернусь, я отвечу на него за вас! – Nickolans

+0

Хорошо, спасибо. Чтобы быть ясным, я хочу отправить/получить локальную строку оценки другому игроку и обновить интерфейс перед началом матча. –

ответ

0

Это функция, я использую для извлечения данных:

open func match(_ theMatch: GKMatch, didReceive data: Data, fromPlayer playerID: String) { 
} 

Теперь данные я отправляю это строка. Поэтому я создаю переменную, которая сворачивает данные и устанавливает их в строковый формат.

let myString = NSKeyedUnarchiver.unarchiveObject(with: data) as! String 

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

let user = UserDefaults.standard 
user.set(myString, forKey: "myString") 

Тогда в моем SKScene я создал таймер, в котором она проверяет каждые несколько секунд, чтобы увидеть, если есть изменения. Он сохраняет значения таким образом, что при поступлении новых значений он может сравниться, и если он отличается, он что-то делает с ним, например: обновляет точки игрока.

Примечание: Это то, что я нашел для работы, у кого-то может быть лучший способ, но он отлично работает для меня.