处理邀请GKTurnBasedMatch没有游戏中心视图控制器
我正在做一个简单的基于回合的文字游戏,我很难搞清楚邀请函是如何工作的。 当用户A邀请用户B参加游戏时,我希望用户B能够在我的自定义比赛界面(即,列出所有用户B的游戏的屏幕)中看到该游戏。 如果用户B被邀请参加游戏时点击通知,事情就没有问题,但是如果用户B自己导航到应用程序,我仍然希望通过自己的界面可以看到游戏。
每当此匹配界面屏幕出现时,我正在使用[GKTurnBasedMatch loadMatchesWithCompletionHandler:]
获取所有本地玩家的匹配。 有了这个,我会假设用户B能够看到他被邀请的比赛,但是这个新的比赛没有出现。 如果我通过GKTurnBasedMatchmakerViewController
接受邀请,则用户按照预期进入游戏,但是更让人费解的是,如果我打开了我的GKTurnBasedMatchmakerViewController
,然后在不接受邀请的情况下取消,现在会在我的自定义匹配中显示新的匹配接口,但它缺less用户A发送的匹配数据。
总之,我真的只是想知道如何正确显示和接受GKTurnBasedMatch
邀请与自定义接口(而不是必须使用GKTurnBasedMatchmakerViewController
)。 谢谢!
这个问题似乎是一对夫妇感兴趣的,所以这里粗略地说明了我所做的事情。
首先,新比赛根本没有出现的原因只是我没有调用[GKTurnBasedMatch loadMatchesWithCompletionHandler:]
每次我想让视图像我一样刷新,虽然我是。 所以我记得那里没有真正的问题。
真正的问题是我收到并显示新的GKTurnBasedMatch
,但没有任何数据(即对手的第一招)可用。 实际上, [GKTurnBasedMatch loadMatchesWithCompletionHandler:]
似乎并不能保证为您提供最新的GKTurnBasedMatch
对象。 为了确保匹配是最新的,我必须在[GKTurnBasedMatch loadMatchesWithCompletionHandler:]
(其中match
是GKTurnBasedMatches之一)返回的每个匹配上调用[match loadMatchDataWithCompletionHandler:]
。 这将返回与该匹配关联的最新匹配数据作为NSData
对象。 然后我可以使用这个NSData
来确保我比赛表中的所有比赛都被刷新了,以反映游戏中心的最新变化。
简而言之,在你的GKTurnBasedMatch
对象上使用loadMatchDataWithCompletionHandler
来确保他们的数据是最新的。
更新:现在包括接收邀请的实际答案。
我一直在努力处理接近一周的基于回合的比赛的邀请。 我终于find了答案。 我会超级突出它,因为它花了我很长时间才发现:
游戏中心把回合制的邀请视为转折事件。 他们不像其他邀请一样处理。
基于回合的事件在GKLocalPlayerListener
协议的这个函数中处理:
player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool)
当你收到比赛,检查你是否被邀请参加比赛,并presto。 你已收到邀请
但:
通过令人沮丧的试验和错误,我发现了一些警告,希望可以节省您一些严重的时间:
- 这只是简单的并不总是工作。 相信与否,Game Center是不可靠的。 这意味着你需要一个备份系统,审查你的本地玩家的公开赛,并search新的邀请。 这本身就是关于警告#2。
- 一个被邀请参加比赛的球员(比如说playerJake被邀请去matchFoo)实际上不会得到那个邀请, 也不会在
loadMatches
返回的比赛中看到这个比赛,直到轮到他们。 显然游戏中心实际上并没有以任何方式让任何玩家参与比赛的邀请名单,直到轮到他们。 - 如果您可以识别您受邀参加的比赛,但尚未回复,则必须直接在该比赛中调用
acceptInvite(...)
。 因此,如果playerJake检查loadMatches
检索到的匹配,并能够检测到matchFoo仍然有一个公开的邀请,matchFoo.acceptInvite( /* ...completion handler stuff here... */)
必须调用matchFoo.acceptInvite( /* ...completion handler stuff here... */)
,然后快乐playerJake已closures并正在运行。
从这里你应该能够得到你自己的编程匹配系统的工作。 祝你好运,我的意思是!