2017-02-13 146 views
1

我正在创建一个使用GameCenter的游戏,我试图发送和检索数据。从GameCenter发送和接收数据:Swift

这是我要送数据:(功能“送出数据”是通过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

好的,谢谢。为了清楚起见,我想发送/接收本地得分字符串给其他玩家,并在开始比赛之前更新UI。 –

回答

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我创建了一个定时器,在此检查每隔几秒钟,看看是否有一个变化。它存储这些值,以便在新值到达时可以进行比较,如果不同,则可以进行一些操作,例如:更新玩家点数。

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