从GameCenter发送和接收数据:Swift

时间:2017-02-13 23:27:02

标签: ios swift game-center gamekit

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

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

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

' GCHelper'是一个我正在使用的课程,其中包含许多游戏中心的功能,如果您有兴趣,可以下载更多问题。我只需要调用它来访问该函数。

然后检索数据我尝试使用此功能:

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)
}

我使用'匹配()'的功能是GCHelper类的一部分。 GCHelper允许您更轻松地创建GameCenter游戏。如果您想引用它,可以使用以下链接:https://github.com/jackcook/GCHelper

问题 现在我已经向您展示了所有方法,我将如何使用以前的方法来检索数据?它的一个参数是来自玩家'并询问playerId(String),但我怎么知道其他玩家的玩家ID是什么?更好的是,我该如何找回它?

如果您认为这是处理检索数据的好方法,我该怎样做得更好?还有另一种方法吗?

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

1 个答案:

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

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