奇怪的 GameKit 错误。 GKLocalPlayer 正在返回对手
Posted
技术标签:
【中文标题】奇怪的 GameKit 错误。 GKLocalPlayer 正在返回对手【英文标题】:Strange GameKit Bug. GKLocalPlayer is returning the opponent 【发布时间】:2014-12-21 21:29:40 【问题描述】:我正在使用游戏中心制作 Sprite Kit 多人游戏。
我正在使用以下代码来获取本地播放器。
GKLocalPlayer.localPlayer()
我用它来获取诸如玩家 ID 和别名之类的东西:
GKLocalPlayer.localPlayer().playerID
GKLocalPlayer.localPlayer().alias
非常简单。但是最奇怪的事情发生了。在比赛期间,GKLocalPlayer.localPlayer()
偶尔会返回对手(即其他玩家)的玩家 ID 和别名。可以想象,这会导致各种问题。
一些附加信息:
是的,我验证了所有用户。 两个用户都使用不同的帐户登录到 Game Center 沙盒服务器。 如上所述,本地播放器最初是正确的。但是在玩家之间建立连接并且我开始发送数据包之后,本地玩家偶尔会返回错误的用户。之后它会继续返回错误信息,直到应用被重置。 我已经测试了几个小时。我很肯定这不是我。事实上,据我所知,Apple 不允许您以编程方式更改 GKLocalPlayer。 我在实际设备上运行 ios 8。这是一个已知问题吗?有人有什么建议吗?我真的很茫然。我想也许我可以尝试调用 GKLocalPlayer.localPlayer() 并保存属性(在奇怪的错误发生之前),而不是不断调用 GKLocalPlayer.localPlayer() 来访问本地播放器。但话又说回来,这只是一种解决方法。
编辑:
为了测试这个问题,我正在运行一个简单的计时器,如下所示:
NSTimer .scheduledTimerWithTimeInterval(1.0, target: self, selector: "test", userInfo: nil, repeats: true)
func test()
println("\(GKLocalPlayer.localPlayer().playerID)")
输出是这样的:(我没有显示整个玩家 ID)。注意 playerID 是如何变化的。而且我查了一下,确实是换成对方的playerID了。别名等也是如此。
G:43...
G:43...
G:43...
G:43...
G:43...
G:43...
G:84...
G:84...
G:84...
G:84...
【问题讨论】:
【参考方案1】:我也遇到了这个问题。问题是您来回传递本地播放器。所以,当本地播放器进来时,经过反序列化后,传入的播放器就变成了本地播放器。
我通过实现我自己的具有 displayName 和 playerID 的播放器对象解决了这个问题。您可以从本地播放器创建一个访客播放器并使用它来传递。只是不要绕过本地玩家。
【讨论】:
我也需要这样做。以上是关于奇怪的 GameKit 错误。 GKLocalPlayer 正在返回对手的主要内容,如果未能解决你的问题,请参考以下文章
GameKit 错误表示玩家未通过身份验证,但 .authenticated 属性 = true
MacOS GameKit 排行榜无法加载应用程序“不支持排行榜”错误