从 GameCenter 发送和接收数据:Swift

Posted

技术标签:

【中文标题】从 GameCenter 发送和接收数据:Swift【英文标题】:Send and receive data from GameCenter: Swift 【发布时间】:2017-02-13 23:27:01 【问题描述】:

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

这就是我发送数据的方式:(函数“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 个人之间交换。我需要知道如何在 2 之间发送和检索数据。 谢谢您的帮助!如果您有任何问题,请告诉我。

【问题讨论】:

你能解决这个问题吗?我在我的一款游戏中遇到了类似的问题。 是的,我知道了,我现在不在家,但到时候我会为你解答! 好的,谢谢。为了清楚起见,我想在开始比赛之前向其他玩家发送/接收本地分数字符串并更新 UI。 【参考方案1】:

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

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

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

【讨论】:

以上是关于从 GameCenter 发送和接收数据:Swift的主要内容,如果未能解决你的问题,请参考以下文章

向/从 Game Center 发送/检索分数对

如何从外部附件异步发送和接收数据

如何同时从 python 发送和接收数据到 arduino

在 iOS SDK 中使用 BLE 从外部设备发送和接收数据

从同一个套接字发送和接收数据的简单 UDP 示例

如何从发送意图接收数据?