从 GameCenter 发送和接收数据:Swift

Send and receive data from GameCenter: Swift

我正在创建一个使用 GameCenter 的游戏,我正在尝试发送和检索数据。

这是我发送数据的方式:(函数'sendData'由GameCenter和GameKit提供)

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

'GCHelper'是我用的class,里面有很多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 class 的一部分。 GCHelper 让您可以更轻松地创建 GameCenter 游戏。这是一个 link 以备您参考:https://github.com/jackcook/GCHelper

问题 既然我已经向您展示了所有方法,那么我将如何使用前面的方法来检索数据呢?它的参数之一是 'fromPlayer' 并询问 playerId(String),但我怎么知道其他玩家的 playerID 是什么?更好的是,我该如何找回它?

如果您认为这不是处理检索数据的好方法,我怎样才能做得更好?还有其他方法吗?

关键事实: 游戏需要 2 个人,数据仅在这 2 个人之间交换。我需要知道如何在两者之间发送和检索数据。 谢谢您的帮助!如果您有任何问题,请告诉我。

这是我用来检索数据的函数:

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 中我创建了一个计时器,它每隔几秒检查一次以查看是否有变化。它存储这些值,以便当新值到达时它可以进行比较,如果不同,它会对其进行一些处理,例如:更新玩家点数。

注意:这是我发现的工作方式,其他人可能有更好的方法,但对我来说效果很好。