我正在使用游戏中心制作一个Sprite Kit多人游戏。
我正在使用以下代码来获取本地播放器。
GKLocalPlayer.localPlayer()
我用它来获取像玩家ID和别名这样的东西:
GKLocalPlayer.localPlayer().playerID
GKLocalPlayer.localPlayer().alias
非常简单。但最奇怪的事情发生了。偶尔在比赛期间GKLocalPlayer.localPlayer()
将返回OPPONENT(即其他玩家)玩家ID和别名。可以想象,这会导致各种各样的问题。
一些其他信息:
这是一个已知问题吗?有没有人有任何建议?我真的很茫然。我想也许我可以尝试调用GKLocalPlayer.localPlayer()并保存属性(在奇怪的错误发生之前),而不是连续调用GKLocalPlayer.localPlayer()来访问本地播放器。但话说回来,这只是一种解决方法。
修改
为了测试这个问题,我正在运行一个简单的计时器,如下所示:
NSTimer .scheduledTimerWithTimeInterval(1.0, target: self, selector: "test", userInfo: nil, repeats: true)
func test() {
println("\(GKLocalPlayer.localPlayer().playerID)")
}
输出是这样的:(我没有显示整个玩家ID)。注意playerID如何变化。我检查过,它确实改变了对手的玩家ID。对于别名等也是如此。
G:43...
G:43...
G:43...
G:43...
G:43...
G:43...
G:84...
G:84...
G:84...
G:84...
答案 0 :(得分:1)
我也遇到了这个问题。问题是你来回传递本地播放器。因此,当本地玩家进入后,在被反序列化后,传入的玩家将成为本地玩家。
通过实现我自己的具有displayName和playerID的播放器对象,我解决了这个问题。您可以从本地玩家创建一个来宾播放器并使用它来传递。只是不要绕过本地球员。