在iOS 9中,Apple弃用了public func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController, didFind match: GKTurnBasedMatch)
的{{1}}方法。
Apple的方向是使用GKTurnBasedMatchmakerViewControllerDelegate
的{{1}}方法。
仅使用func player(_ player: GKPlayer, receivedTurnEventFor match: GKTurnBasedMatch, didBecomeActive: Bool)
会导致以下情况:
GKLocalPlayerListener
,显示receivedTurnEventFor match
。+
,游戏中心将搜索匹配项。GKTurnBasedMatchmakerViewController
的匹配(新匹配),或将用户置于正在进行的匹配中 - 并通过Play Now
通知游戏。 虽然确定是否已创建新匹配(使用matchData
)非常简单,但似乎没有办法确定是否找到匹配,而是将匹配更新为全部事件流经receivedTurnEventFor match
。
我的问题是:
使用matchData
的{{1}}方法时,有没有办法确定转弯事件是否是匹配发现的结果?
答案 0 :(得分:1)
有四种情况: 你参加了一场新的比赛,轮到你了(你是比赛的创造者) 你参加了一场新比赛,其他球员转身(你找到了比赛) 你参加了一场精彩的比赛,轮到你了 你参加现有的比赛,然后是其他球员。 情况3和4可能是您在比赛之间切换或重新加入比赛。
您可以查看match.currentPatriticant
和lastTurnDate
属性,以确定发生的情况。
如果玩家只是创建新匹配(receivedTurnEventFor
因匹配而被调用)match.participants[0].lastTurnDate
为零且match.currentParticipant?.player?.playerID
等于GKLocalPlayer.localPlayer().playerID
(案例1)
如果您加入现有比赛:
match.participants[0].lastTurnDate
为nil
且match.currentParticipant?.player?.playerID
不等于GKLocalPlayer.localPlayer().playerID
(您加入了新的匹配,但其他玩家处于转弯状态2)
明确确定案例3和案例4,您可以查看所有参与者的lastTurnDate
,并将本地玩家与当前玩家进行比较。
答案 1 :(得分:0)
我认为游戏中心不会帮助你。它看起来像是对重载receivedTurnEventForMatch
函数的另一个模糊调用。但是,我相信你可以自己管理这个,因为你知道发起的玩家总是在任何其他参与者之前看到比赛。
这里看起来有四种情况:
玩家与至少一个自动匹配参与者创建一个新匹配:您可以检测到这一点,因为参与者将在"匹配"收到新比赛时的状态。在这种情况下,作为创建者,您可以在匹配数据中设置标志,指示哪些玩家有邀请,哪些是自动匹配。
玩家通过邀请创建新匹配:在这种情况下,应在新接收的匹配中设置所有参与者。同样,您可以在后续玩家可以阅读的匹配数据中设置标记。
玩家加入一个作为自动匹配创建的匹配:如果你只支持2个玩家,那么当player2收到这个匹配时,两个玩家ID都将被设置。如果你支持更多,那么某些插槽仍将被设置为自动匹配(不可靠),但这并不是很有帮助。但是,如果原始播放器在匹配数据中设置标记,指示哪些玩家被邀请与自动匹配插槽,则该玩家可以确定自己的状态。
玩家加入一场比赛有一个或多个邀请:与之前的情况相同。加入的玩家不能从游戏中心确定任何有用的东西,并且将依赖于由发起玩家添加到匹配的数据。