我创造了一个2人回合制游戏。我希望每位球员有24小时轮到他们。如果他们没有达到这个时间限制,我想结束比赛。
。
我尝试过使用NSTimer,下面的函数作为选择器。
func timerCalled() {
for part in currentMatch!.participants! {
(part ).matchOutcome = .Tied
}
currentMatch?.endMatchInTurnWithMatchData(data!, scores: nil, achievements: nil, completionHandler: { (error) -> Void in
if error != nil {
print(error)
}
self.statusLabel?.text = "Game has ended"
})
}
然而,我的游戏在运行此功能时崩溃,并将其打印到控制台:“由于会话处于无效状态,因此无法完成请求的操作”。它崩溃是因为我在玩家转弯后启动计时器,所以当“他”结束游戏时不再轮到他了。我相信如果我让当前的玩家在时间结束时结束游戏,但是如何/何时启动计时器,它会起作用?当玩家1轮到他时,我必须用玩家2启动计时器。我该怎么做?
答案 0 :(得分:0)
不幸的是,在撰写本文时,Game Center不支持您想要做的事情。
你使用计时器的方法不会有效,因为正如你所见,你不能依靠player2轮流启动计时器或在计时器启动时激活。而且,正如你所见,玩家1不能强迫玩家2结束。
你可以在拨打turnTimeout
时设置endTurnWithNextParticipants
参数,基本上说,“我已完成本回合,而下一位玩家有足够的时间来完成转弯。”但是,对于每个WWDC视频,转弯中的最后一个玩家将永远不会超时。所以,在一个双人游戏中(真的是在任何回合制比赛中),最后一个玩家总是具有竞争优势,因为他们永远不会超时。
作为一种解决方法,我从匹配数据中取出先前玩家的最后一个转弯日期,为其添加超时值,并检查当前时间是否超出该值。如果是的话,我在那里杀了转弯。然而,玩家2可能已经等了几天甚至几周才重新开始游戏。或者他们可能永远不会回来在这种情况下,基于回合的游戏陷入困境,除非/直到最终玩家返回,否则之前的玩家无法继续进行。